C++STL常用操作之unordered_map与map篇
简介:
map和unordered_map存储的内容是一样的,都是(key,value)。
区别:
1.map内置红黑树,unordered_map内置哈希表。
2.map具有排序功能,unordered_map内的元素是无序的。
3.map的查询,插入、删除操作时间复杂度都是O(logn),unordered_map的查找时间复杂度是O(1)。
4.map因为内置红黑树,每个节点都要额外存储父节点等内容,所以内存占用较大,但是unordered_map还更大!
注意:虽然哈希表的查询时间是O(1),但是不一定unordered_map的查询时间就一定比map短,在考虑到数据量的时情况下,因为unordered_map的hash函数构造速度比较慢,所以应该具体情况, 具体分析,具体选择!
#include<unordered_map>
常用操作:
#include<iostream>
#include<unordered_map>
#include<string>
using namespace std;
int main() {
unordered_map<int,string> um;
um.insert(pair<int,string>(1,"one")); //一般插入
um[3] = "three"; //数组的形式,如果存在就修改,否则插入
um.insert(pair<int,string>(2,"two"));
um[2] = "twotwo"; //修改
for(auto it = um.begin();it != um.end();++it) //begin,end,迭代器
cout<<it->first<<" "<<it->second<<"\n";
cout<<"um'size = "<<um.size()<<"\n"; //size
if(um.empty()) //empty
cout<<"um is empty!"<<"\n";
else
cout<<"um is not empty"<<"\n";
auto it = um.find(1); //find
if(it != um.end())
cout<<it->first<<" "<<it->second<<"\n";
cout<<um.count(2)<<"\n"; //count
return 0;
}
输出:
2 twotwo
1 one
3 three
um'size = 3
um is not empty
1 one
1