c++ stl unordered_map常见用法

99 阅读1分钟

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;
}