相同点:
都是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博客