unordered_map和map的区别

unordered_mapmap 都是 C++ STL 中的关联数组容器,用于存储键值对(key-value pairs)。其中,键是唯一的,而值则可以重复。

它们的主要区别在于实现方式不同。map 实现了红黑树,因此可以自动按照键值排序,而且在查找、插入和删除操作中具有较高的效率。但是,红黑树的构建和维护需要较多的时间和空间开销

相比之下,unordered_map 实现了哈希表,因此在查找、插入和删除操作中具有非常高的效率。但是,由于哈希函数的存在,它的元素没有固定的顺序,并且在处理冲突时需要进行额外的开销

因此,如果需要按照键值排序或需要保证元素顺序稳定,可以使用 map;而如果需要快速的查找、插入和删除操作,可以使用 unordered_map

另外,unordered_map 的内存占用通常比 map 大,因为它需要更多的哈希桶来减少冲突。在某些情况下,也可以使用 std::unordered_setstd::set,它们分别实现了哈希表和红黑树,用于存储不重复的元素。

以下是 unordered_mapmap 的代码示例,展示它们在使用上的区别:

#include <iostream>
#include <map>
#include <unordered_map>

int main() {
    // 使用 map 存储键值对,会自动按照键值排序
    std::map<std::string, int> myMap;
    myMap["apple"] = 3;
    myMap["banana"] = 2;
    myMap["orange"] = 5;
    myMap["pear"] = 7;

    // 输出 map 中的元素
    for (auto it = myMap.begin(); it != myMap.end(); ++it) {
        std::cout << it->first << ": " << it->second << std::endl;
    }

    // 使用 unordered_map 存储键值对,元素没有固定的顺序
    std::unordered_map<std::string, int> myUnorderedMap;
    myUnorderedMap["apple"] = 3;
    myUnorderedMap["banana"] = 2;
    myUnorderedMap["orange"] = 5;
    myUnorderedMap["pear"] = 7;

    // 输出 unordered_map 中的元素
    for (auto it = myUnorderedMap.begin(); it != myUnorderedMap.end(); ++it) {
        std::cout << it->first << ": " << it->second << std::endl;
    }

    return 0;
}

输出结果可能类似于以下内容:

apple: 3
banana: 2
orange: 5
pear: 7
banana: 2
apple: 3
pear: 7
orange: 5

可以看到,使用 map 存储键值对时,元素会自动按照键值排序;而使用 unordered_map 存储键值对时,元素没有固定的顺序。

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值