之前在做一个东西,使用了unordered_map,其中出现了一个bug。后面发现原来是使用unordered_map 时,不能通过重新插入key&value更新之前的东西。
其中multi_set unordered_set multi_map 都不能这样改变
比如
unordered_map mymap;
mymap.insert(pair('a',"aaaaa"));
// mymap.insert(make_pair('a',"aaaaa"));
mymap.insert(pair('a',"bbbbb"));//修改失败
mymap['a'] = "bbbbb"; //可以成功修改
关于unordered_map 是基于hash实现的,查找和O(1),最差O(n)
map 在查找是O(lg(n))
插入unordered_map 插入O(1)
hash表每个格子就是一个bucket,
可以通过mymap.bucket(x) 查看x所属于的bucket
可以通过mymap.bucket_count(),查看有多少个bucket
可以通过mymap.load_factor()查看一些其他信息
unordered_map存在[] 操作符,但是用于遍历的,一般是用于改变值
mymap['a'] = "bbbbb"; //可以成功修改
cout<
在遍历值时最好使用迭代器
unordered_map iter = mymap.find('a');
if(iter!= mymap.end()){
cout<<*iter<
multimap以及unordered_multimap 没有[]操作符
//unordered_map iter;
pair,bool> ret;
ret = mymap.insert(make_pair('b',"bbbbb"));
if(ret->second){
cout<<*ret->first<
mymap['a']; //这种没有边界检查
mymap.at('a'); //有边界检查