unordered_map介绍

简介: unordered_map介绍

unordered_map是C++11提供的新容器。

unordered_map和map的区别有:


1.map不允许重复元素。unordered_map允许重复元素。

2.map内部实现了红黑树,会对键名排序,查找的时间复杂度可达到O(logn)。 unordered_map内部实现了一个哈希表,查找的时间复杂度可达到O(1)。

map


优点:有序性,这是map结构最大的优点,其元素的有序性在很多应用中都会简化很多的操作

红黑树,内部实现一个红黑书使得map的很多操作在lgn的时间复杂度下就可以实现,因此效率非常的高

缺点: 空间占用率高,因为map内部实现了红黑树,虽然提高了运行效率,但是因为每一个节点都需要额外保

存父节点、孩子节点和红/黑性质,使得每一个节点都占用大量的空间

适用处:对于那些有顺序要求的问题,用map会更高效一些

unordered_map:


优点: 因为内部实现了哈希表,因此其查找速度非常的快

缺点: 哈希表的建立比较耗费时间

适用处:对于查找问题,unordered_map会更加高效一些,因此遇到查找问题,常会考虑一下用unordered_map

总结:

unordered_map执行效率要比map高很多

unordered_map的用法:


创建

unordered_map<int, string> myMap
键类型、值类型

插入

unordered_map<int, string> myMap = { { 5, "张大" },{ 6, "李五" } };//使用{}赋值
myMap[2] = "李四";  //使用[ ]进行单个插入,若已存在键值2,则赋值修改,若无则插入。
myMap.insert(pair<int, string>(3, "陈二"));//使用insert和pair插入

查找

auto iterator = myMap.find(2);//find()返回一个指向2的迭代器
    if (iterator != myMap.end())
        cout << endl << iterator->first << "," << iterator->second << endl;

迭代器访问

  1. map.end()指向map的最后一个元素之后的地址,无论执行map.erase(iter)还是map.add(key, value),map.end()所返回的值永远不会发生变化,都是指向同一块内存。
  2. map.begin()指向map的第一个元素,map.begin()可能随着map.erase(iter)或是map.add(key, value)操作而发生改变。例如当第一个元素被删除后,map.begin()就发生了改变,指向原来第一个元素之后的那个元素了。或是如果新插入一个键值对,该键值对的key放到btree(我们假设map内部是由btree实现的,实际上也可能有别的实现方式)中会排在map.begin()->first的前面,那么map.begin()也会指向新插入的这个键值对了。
  3. map.erase(iter)执行后,当前iter就失去意义了,再执行++iter就会出问题。
cout << myMap[2] << endl;

直接返回2的值;如果键名是自定义类型,或者字符串、其他类型; 第一种是:重载==操作符,利用equal_to;另一种方法就是使用函数对象。自定义一个比较函数体。

相关文章
|
4天前
|
存储 Serverless C++
【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]
【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]
8 1
|
5月前
|
存储 C语言 容器
unordered_map介绍
unordered_map介绍
|
3月前
|
存储 编译器 Serverless
用C++实现一个哈希桶并封装实现 unordered_map 和 unordered_set
用C++实现一个哈希桶并封装实现 unordered_map 和 unordered_set
|
4月前
|
存储 C++ 容器
unordered_set和unordered_map的封装
unordered_set和unordered_map的封装
36 0
|
4月前
|
C++
c++ unordered_map4种遍历方式
c++ unordered_map4种遍历方式
52 0
|
5月前
|
存储 算法 C++
C++ unordered_map和unordered_set的使用
C++ unordered_map和unordered_set的使用
41 0
|
6月前
|
C++ 容器
unordered_map和unordered_set的源码模拟实现
unordered_map和unordered_set的源码模拟实现
|
7月前
|
存储 Java C++
unordered_set和unordered_map的使用【STL】
unordered_set和unordered_map的使用【STL】
141 0
|
9月前
|
C++
【unordered_map和unordered_set的封装】
【unordered_map和unordered_set的封装】
51 0
|
10月前
|
存储 自然语言处理
Ananagrams(map+vector)
Ananagrams(map+vector)
71 0