map与unordered_map

1.底层实现

        map:基于红黑树(一种平衡的二叉搜索树)

        unordered_map:基于哈希表实现

2.元素顺序

        map:元素按照键的顺序(默认升序)存储

        unordered_map:元素无序存储 顺序取决于哈希函数

3.时间复杂度

        查找操作:

                map:O(log n)

                unordered_map:平均O(1)  最坏O(n)

        插入/删除操作

                map:O(log n)

                unordered_map:平均O(1)  最坏O(n)

4.内存使用

        map:通常占用较小内存 因为不需要维护哈希表

        unordered_map:通常占用更多内存 因为需要维护哈希表

5.键的要求

        map:键类型需要支持 < 操作或提供自定义比较函数

        unordered_map:键类型需要支持哈希函数和 == 操作

6.迭代器稳定性

        map:插入/删除操作不会使迭代器失效(除非删除当前元素)

        unordered_map:插入操作可能导致重新哈希 使所有迭代器失效

7.使用场景

        map:需要有序数据时使用

        unordered_map:需要快速查找(尤其大量数据)且不关心顺序时

#include<map>
#include<unordered_map>
using namespace std;
int main(){
    //map示例
    map<int,string>m1;
    m1[3] = "three";
    m1[1] = "one";
    m1[2] = "two";
    //输出顺序:1,2,3
    for(const auto& p : m1){
        cout<<p.first<<":"<<p.second<<endl;
    }


    //unordered_map 示例
    unordered_map<int,string>m2;
    m2[3] = "three";
    m2[1] = "one";
    m2[2] = "two";
    //输出顺序不确定
    for (const auto& p : m2) {
        cout<<p.first<<":"<<p.second<<endl;
    }
    return 0;
}

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值