STL——map/unordered_map

pair对组创建:pair<type,type> p(value1,value2);

pair<type,type> p = make_pair(value1,value2);

map

map中所有元素都是pair,第一个元素为key,第二个为value

所有元素会根据键值自动排序

也是基于红黑树实现,支持高效插入、查找和删除操作,复杂度都是O(logn),

可以根据key值快速找到value值

map和multimap区别:

  • map不允许容器中有重复key值元素

  • multimap允许容器中有重复key值元素

map构造赋值

  • map<T1,T2> map; //map默认构造函数

  • map(const map &mp); //拷贝构造函数

  • map& operator=(const map &mp); //重载等号运算符

map大小和交换

统计map容器大小以及交换map容器

  • size(); //返回容器中元素的数目

  • empty(); //判断容器是否为空

  • swap(st); //交换两个集合容器

插入删除

  • insert(elem); //在容器中插入元素。

  • clear(); //清除所有元素

  • erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器。

  • erase(beg, end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。

  • erase(key); //删除容器中值为key的元素。

查找统计

  • find(key); //查找key是否存在,若存在,返回该键的元素的迭代器;若是multimap,则是返回第一个满足的迭代器,若不存在,返回end();

  • count(key); //统计key的元素个数

排序

map默认按照key值进行从小到达排序,使用仿函数可以进行自定义排序,规则与set类似

自定义类型则必须设置排序方式

map<Person, int, MyCompare> m;

unordered_map

基于哈希表实现 ,故在插入、删除和查找操作能在常数复杂度**O(1)**实现

也保持了键的唯一性,但不会根据键值自动排序

常用接口与map一致,同时遍历顺序下也是不一致的

适合于需要用于快速查找、删除和插入唯一元素,但不关心元素顺序的场景

性能注意事项:

  • 当unordered_map元素数量增长超过哈希容量的负载因子时,哈希表将重新进行哈希操作,这可能会比较耗时,因此通常可以预先确定将要存储的元素数量进行reverse()方法来预分配足够的空间以提高效率
相关推荐
誰能久伴不乏1 小时前
桌面客户端的运行日志系统:SQLite 分块 + 独立写线程 + 文本降级
数据库·c++·qt·架构·sqlite
2601_966949656 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
晨曦中的暮雨8 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
喵了几个咪9 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风9 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
2601_9628857211 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
choumin11 小时前
C++中万能引用与std::forward的作用和用法
c++·万能引用·std forward
Wang's Blog11 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
下一站春风里12 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
天外飞雨道沧桑13 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程