1. map、unordered_map
map、unordered _ map都是存<key,value>键值对的,map会自动按照key自动排序,而unordered _ map不会
map基于红黑树实现, 搜索、插入、删除的时间复杂度都是O(logN)
unordered _ map基于哈希表,一般可以看做是O(1)时间复杂度(选择合适的哈希函数),但最坏可能达到O(N)
2. set、unordered_set
set、unordered _ set中元素的值同时是标识它唯一的键值 ,set会自动按照键值自动排序,而unordered _ set不会
set基于红黑树实现, 搜索、插入、删除的时间复杂度都是O(logN)
unordered _ set基于哈希表,一般可以看做是O(1)时间复杂度(选择合适的哈希函数),但最坏可能达到O(N)
3. multiset、unordered_multiset
是可以存重复元素的set,可以往其中插入重复值,删除的时候只删除其中一个
删除方式为:st.erase(st.find(val))
multiset是有序的(默认升序),unordered_multiset无序
multimap、unordered_multimap
也是可以存储重复key−value对的
模拟应用
lc1825-求出MK平均值
直接初始化set
class Solution {
public:
string greatestLetter(string s) {
unordered_set<char> st(s.begin(), s.end());
for (char ch = 'Z'; ch >= 'A'; ch --)
if (st.count(ch) && st.count(char(ch + 32))) return string(1, ch);
return "";
}
};