STL中的map和unordered_map
map
头文件 #include <map>
原理:std::map的内部实现了一颗红黑树,有对其键值进行排序的功能,所以map是一个有序的容器,map中的每一个元素都是红黑树的一个节点,插入、删除、查找等操作的复杂度都是logn的
//定义
map<int,int> mp
//插入
1.mp.insert(pair<int, int>(x, y));
2.mp[x]+=y;
//删除
mp.erase(x);
mp.erase(mp.begin(),mp.end());//删除区间是一个前闭后开的区间
//迭代
map<int,int>::iterator it;
for(it=mp.begin();it!=mp.end();it++)
//利用迭代器查找键值或者直接得到该节点的值
mp[x];
map<int, int>::iterator it;//得到的迭代器是一个pair对象,键是 //first,值是second
it = mp.find(x);
cout << it->second << endl;
cout << (*it).second << endl;
//大小
mp.size();
unordered_map
头文件 #include <unordered_map>
原理:std::unordered_map的内部实现了一个哈希表,其中的元素的无序的,unordered_map中每个特定的key都会通过一些特定的哈希运算到一个特定的位置,这个特定的位置可能重复,所以这个位置有多个元素,将这个位置称为哈希桶
用法和map 是差不多的就不详细介绍了
区别
map查找比unordered_map慢一些
unordered_map的建立会比map慢很多
这样,如果我们建树后就不需要多次查询的话就用unordered_map
建树后需要修改的话就用map吧
还是看实际情况选择