unordered_map和map的区别 unordered_map的创建以及成员函数使用

相同点:

都是C++的关联容器,用于存储键值对

不同点:

1.map

1.1map

内部使用红黑树来实现 (大小有序、中序遍历)插图删除的复杂度是O(logn), 查找数据有顺序时使用map查找更快

需要引入头文件  #include<map>

1.2缺点

空间占用率高,内部为红黑树 提高了运行效率,因为每个节点都需要保存父节点、子节点和红黑性质,所以每个节点都占有大量空间;

1.3试用条件:   

 按照键排序输出元素 、最大值、最小值

2.unorderd_map

2.1unorderd_map

使用哈希表来实现(大小无序) 

需要引入头文件   #include <unordered_map>

2.2缺点

建立时耗费时间,有哈希冲突

2.3试用条件

查找数据无序是使用 查找速度更快查找复杂度O(1)查找是否存在某个键值对、统计某个值出现的次数

2.4 unordered_map创建

#include<unordered_map>
#include<string>
//1.创建不初始化
unordered_map<string,string>umap;
//2.创建并初始化
unordered_map<string,string>umap{
    {"淘宝","https://www.taobao.com/"},
    {"京东","https://www.jd.com/"},
    {"天猫商城","https://jx.tmall.com/"}
};

//3.使用别的unordered_map对新的进行初始化 ,umap2 容器中就包含有 umap 容器中所有的键值对。
unordered_map<string,string>umap2(map);
//4.除此之外,C++ 11 标准中还向 unordered_map 模板类增加了移动构造函数,即以右值引用的方式将临时         //unordered_map 容器中存储的所有键值对,全部复制给新建容器。例如
//返回临时 unordered_map 容器的函数
std::unordered_map <std::string, std::string > retUmap(){
    std::unordered_map<std::string, std::string>tempUmap{
        {"淘宝","https://www.taobao.com/"},
        {"京东","https://www.jd.com/"},
        {"天猫商城","https://jx.tmall.com/"} };
    return tempUmap;
}
//调用移动构造函数,创建 umap2 容器
std::unordered_map<std::string, std::string> umap2(retUmap());
//5.拷贝部分键值对
unordered_map<string,string>umap2(++umap.begin(),umap.end());

3.c++ unordered_map容器的成员方法

4、map和unordered_map的使用

unordered_map的用法和map是一样的,提供了insert,size,count等操作,并且里面的元素也是以pair类型来存储的,其底层实现是完全不同的,上方已经解释了,但是就外部使用来说却是一致的。

5、举例说明

#include<iostream>
#include<unordered_map>
#include<map>
#include<string>
using namespace std;

int main()
{
    // 注意:c++11才开始支持括号初始化
    unordered_map<int, string> myMap = {{5, "zhangsan"},{6, "lisi"}};  // 使用{}赋值
    myMap[2] = "wanger";  // 使用[ ] 进行当个插入,若已存在键值2,则赋值修改,若无则插之。
    myMap.insert(pair<int, string>(3, "mazi"));  // 使用insert和pair插入。

    // 遍历输出+迭代器的使用。
    auto iter = myMap.begin();  // auto自动识别为迭代器类型unordered_map<int, string>::iterator
    while(iter != myMap.end())
    {
        cout << iter->first << "," << iter->second << endl;
        ++iter;
    }

    // 查找元素并输出 + 迭代器的使用
    auto iterator = myMap.find(6);  // find()返回一个指向2的迭代器。
    if(iterator != myMap.end())
        cout << endl << iterator->first << "," << iterator->second << endl;
    system("pause");
    return 0;
}

c++中unordered_map的用法的详述(包含unordered_map和map的区别)_c++ unordered_map_进击的Explorer的博客-CSDN博客unordered_map和map的区别_菜鸟的主旋律的博客-CSDN博客

map和unordered_map区别_map和unorderedmap的区别_小邓吖的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值