map 是一种关联式容器,它将键映射到值。它的内部实现使用了红黑树,因此 map 中的元素按照关键字的升序排列。
unordered_map 也是一种关联式容器,它将键映射到值。但是,它的内部实现使用了哈希表,因此 unordered_map 中的元素不保证有序。
因为使用了哈希表,所以 unordered_map 的查找速度比 map 快,但是它的空间开销比 map 大,而且不支持迭代器。
哈希表的优点在于,可以在常数时间内执行插入、删除和查找操作。但是,因为哈希表使用了散列函数,所以元素的存储顺序与元素的键值无关。所以,如果需要按照升序或降序遍历元素,就必须使用 map 了。
创建一个unordered_map
unordered_map<string, int> umap;
unordered_map<string, string> umap;
插入一个元素
umap.emplace("a", 1);
通过[]来进行插入
unordered_map<int, int> umap;
int sum;
int dfs(TreeNode* root){
if(root == nullptr)//遇到叶子结点的左右空指针,不做sum处理,直接返回0给其父结点(即叶子结点)
return 0;
sum = root->val + dfs(root->left) + dfs(root->right);
umap[sum] ++;
return sum;
}
删除指定元素
erase("a")
返回第一个元素,最后一个元素的键值对
umap.begin()
umap.end()
判断umap是否为空
umap.empty()
返回umap内键值对的数量
umap.size()
查找以 key 为键的键值对
nmap.find(key)
如果找到,则返回一个指向该键值对的正向迭代器;反之,则返回一个指向容器中最后一个键值对之后位置的迭代器(如果 end() 方法返回的迭代器)。
遍历unordered_map
for (auto iter = umap.begin(); iter != umap.end(); ++iter) {
cout << iter->first << " " << iter->second << endl;
}