• C++ map与unordered_map


    1. 定义

    map: map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),红黑树具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素。因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行的操作。

    unordered_map: unordered_map内部实现了一个哈希表(也叫散列表,通过把关键码值映射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),其在海量数据处理中有着广泛应用)。因此,其元素的排列顺序是无序的。

    2. 两者优缺点:

    map是有序的(可自定义排序),用于需要有序的场景;

    unordered_map无序,使用普通查找场景。

    3. unordered_map方法

    =================迭代器========================= 
    begin   返回指向容器起始位置的迭代器(iterator) 
    end      返回指向容器末尾位置的迭代器 
    cbegin    返回指向容器起始位置的常迭代器(const_iterator) 
    cend    返回指向容器末尾位置的常迭代器 
    =================Capacity================ 
    size     返回有效元素个数 
    max_size  返回 unordered_map 支持的最大元素个数 
    empty        判断是否为空 
    =================元素访问================= 
    operator[]       访问元素 
    at         访问元素 
    =================元素修改================= 
    insert    插入元素 
    erase   删除元素 
    swap    交换内容 
    clear     清空内容 
    emplace  构造及插入一个元素 
    emplace_hint 按提示构造及插入一个元素 
    ================操作========================= 
    find       通过给定主键查找元素,没找到:返回unordered_map::end
    count      返回匹配给定主键的元素的个数 
    equal_range   返回值匹配给定搜索值的元素组成的范围 
    ================Buckets====================== 
    bucket_count    返回槽(Bucket)数 
    max_bucket_count    返回最大槽数 
    bucket_size       返回槽大小 
    bucket       返回元素所在槽的序号 
    load_factor     返回载入因子,即一个元素槽(Bucket)的最大元素数 
    max_load_factor    返回或设置最大载入因子 
    rehash       设置槽数 
    reserve        请求改变容器容量

    4. map常用方法

    插入

    //直接下标插入
    enumMap[1] = "One";
    enumMap[2] = "Two";
    //或者
    enumMap.insert(map<int, CString> :: value_type(2, "Two"))
    //查看是否包含key
    enumMap.count(key)== 0

    查找

    CString tmp = enumMap[2];

    遍历

    map<pair<int,int>,int>::iterator it=mymap.begin();
    while(it!=mymap.end()){
        cout<<it->second<<endl;
        it++;
    }

    删除

    mymap.erase(iter);//根据迭代器删除
    mymap.erase(mymap.begin(),mymap.end());//相当于clear
    mymap.erase(key);//根据key删除

    5. 踩坑

    unordered_map主键类型不能是vector<int>,pair<int,int>这种;但是map可以。

  • 相关阅读:
    How to disable ipv6 in ubuntu
    git 暂存区问题
    linux 自动输入密码脚本避免密码确认
    【Linux学习简记 】数据流重定向<,<<,>,>>,2>,2>>
    【Gradle教程】Gradle 基础入门
    vsftpd配置匿名下载,登录上传
    Thunar左侧边栏不完全显示PLACES的解决
    【Jenkins系列教程】流水线通过SSH方式操作Git仓库
    害你加班的bug就是我写的,记一次升级Jenkins插件引发的加班
    Linux 临时终端连接无线网
  • 原文地址:https://www.cnblogs.com/Kinghao0319/p/14196574.html
Copyright © 2020-2023  润新知