map 与 unordered_map的基本用法及区别
map
特性
- 所有元素根据元素的键值key自动排序
- 每个元素都是<key,value>的键值对
- 不允许有键值相同的元素
- key不能修改,但可以通过key修改与其对应的value
- 可以删除与value对应的键值key,重新插入以达到修改的目的
优点
- 有序性,这是map结构最大的优点,可以简化很多操作
- 红黑树,内部实现一个红黑树使得map很多操作可以在$log_n$复杂度下就可以实现,效率非常高
缺点
- 空间占用率高,map内部实现了红黑树,虽然提高了运行效率,但是每个结点都需要额外保存父节点、孩子节点和红黑性质,使得每个结点都占用大量的空间
作用场景
- 字典
- 统计出现次数
##常用操作//初始化和插入 unordered_map<int, string> mymap = {{4, "张大"},{5, "李五"}};//使用{}赋值 myMap[2] = "李四";//使用[]进行单个插入,若已经存在键值2,则赋值修改,若无则插入 myMap.insert(pair<int, string>(3, "陈二"));//使用insert和pair插入 //遍历输出+迭代器使用 auto iter= myMap.begin();//auto自动识别迭代器类型为unordered_map<int, string> while(iter!=myMap.end()) { cout<< iter->first <<"," << iter->second <<endl; ++iter; } //查找元素并输出+迭代器的使用 auto iterator = myMap.find(2);//find返回一个指向2的迭代器 if((iterator != myMap.end()) cout<< endl << iterator->first <<"," <<iterator->second<<endl; system("pause"); return 0;
unordered_map
优点
常用操作
与map类似
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!