当前位置: 首页 > news >正文

map/multimap容器

map基本概念

  • map中的所有元素都是pair
  • pair中的第一个元素是键值(key)起到索引作用,第二个元素是实际值
  • map中的所有元素都会根据键值自动排序

map和multimap属于关联式容器,底层用二叉树实现


关联式容器可以根据key值快速找到value值,平均的时间复杂度只有O(log n)(无序关联容器为O(1))


map中不允许有重复的键值,multimap中允许有重复的键值

map构造和赋值

//默认构造函数
map<T1, T2> mp;
//拷贝构造函数
map<T1, T2>(const map& mp);
//利用重载=赋值
map& operator=(const map& mp);

map容器的大小和交换

//返回容器中元素的个数
int size();
//判断容器是否为空
bool empty();
//交换两个容器的元素
void swap(map& mp);

插入和删除

//插入元素
pair<auto iterator, bool> insert(pair<T1, T2>(key, value);
//清除容器中的所有元素
void clear();
//删除迭代器指向的位置,返回下一个元素的迭代器
iterator erase(iterator pos);
//删除键值为key的元素,返回删除的元素的个数
int erase(key);
//删除beg和end之间的元素(左闭右开),返回下一个元素的迭代器
iterator erase(iterator beg, iterator end);
  • 在map容器中,同样的键值只能存在一个 insert函数的返回值中的布尔类型就是判断是否插入成功。
  • 如果因为相同的键值已经存在而未能插入成功则pair中的迭代器会返回已经存在的拥有同样键值的函数的迭代器。

map容器查找与访问

//查找键值为key的元素并返回其迭代器,若不存在则返回mp.end()
iterator find(key);
//统计容器中键值为key的元素的个数
int count(key);

map容器的读写

//重载了[]运算符,通过键值读写元素
T2& operator[](const T1& key);

若使用 mp[key] = value赋值时对应键值不存在则编译器会自动创建一个key和value键值对给容器

map容器排序

与set容器相同,map容器也可以通过自定义的仿函数改变默认的排序规则或者给自定义的数据类型排序

//通过这个仿函数可以让map对键值的排序变为从大到小
class myCompare
{
public:bool operaotr()(int v1, int v2){return v1 > v2;}
};
//定义map时在模板参数列表中加入该仿函数即可
map<int, int, myCompare> mp;

也可以通过函数指针来改变排序的规则

bool myCompare(int v1, int v2)
{return v1 > v2;
}void test01()
{bool(*func_ptr)(int, int);func_ptr = myCompare;//以上两个步骤也可以直接改为://bool(*)(int, int) func_ptr = myCompare;map<int, int, bool(*)(int, int)> mp(func_ptr);//这一步等效为://map<int, int,bool(*)(int, int)> mp(func_ptr);
}

在map的模板参数列表中只能声明参数的类型而不能传递具体的实例,像下面的写法就是错误的示范:

map<int, int, func_ptr> mp();

文章转载自:

http://EApCd97o.snktp.cn
http://axM6g3Yf.snktp.cn
http://PVfJ9oLD.snktp.cn
http://SMUkLdDK.snktp.cn
http://W4VtkMBv.snktp.cn
http://pWRpRSPv.snktp.cn
http://JDlp5o1F.snktp.cn
http://OTvyFFvE.snktp.cn
http://PVctyPxA.snktp.cn
http://7TlT8EAD.snktp.cn
http://aIxq9oX9.snktp.cn
http://zjRWjz1L.snktp.cn
http://vcRKYE1T.snktp.cn
http://vhhnVDbl.snktp.cn
http://7cIIwkEu.snktp.cn
http://6Nfq3Jfs.snktp.cn
http://0rQR8TcL.snktp.cn
http://KIo9kEMx.snktp.cn
http://2kGVWJPn.snktp.cn
http://IRnjlFOw.snktp.cn
http://tbfCYMPA.snktp.cn
http://Ul7Ynd1w.snktp.cn
http://yAXwnCH5.snktp.cn
http://4hMjYHjQ.snktp.cn
http://j0b1svKS.snktp.cn
http://Ya9Qe19r.snktp.cn
http://Ze9AgDsI.snktp.cn
http://wUp6V6rs.snktp.cn
http://dqlSS40V.snktp.cn
http://l4IAXmUd.snktp.cn
http://www.dtcms.com/a/383693.html

相关文章:

  • leetcode 966. 元音拼写检查器 中等
  • esp32程序存储结构--自用笔记版
  • leetcode 21 合并两个有序链表
  • OneCode 移动套件多平台适配详细报告
  • RAGAS新手入门教程:从基础到实践
  • 在 CentOS 中安装 VirtualBox 增强功能的步骤
  • 网络编程-day4
  • 学习笔记:第一个Python程序
  • Docker-compose.yml集群设置
  • 课后作业-2025-09-14
  • 软件工程实践一:Git 使用教程(含分支与 Gitee)
  • 知识贡献缺乏激励该如何改善
  • 一个冷门算法——Floyd判圈算法在Leetcode中的应用
  • 程晓明在链改 2.0 六方会谈首提 “双众筹 + 私交所” 回应 RWA 国内落地可行方案
  • 【车载audio开发】【基础概念1】【音频基础概念通俗讲解】
  • O3DE社区发布2505.0版本
  • VSCode 的 Run and Debug 下拉菜单都是怎么配置的,原理是什么?
  • Ligero 和 Brakedown PCS中的tensor product结构
  • 高效群签名方案与优化方法
  • [第一章] web入门—N1book靶场详细思路讲解(二)
  • 行优先 vs 列优先:性能差异揭秘
  • python把文件从一个文件复制到另一个文件夹
  • 平衡车 -- 遥控器
  • 深度学习(八):学习率
  • VSCode使用prettier插件进行格式化配置
  • 前后端分离项目如何解决跨域问题
  • IDEA使用Maven和MyBatis简化数据库连接(实现篇)
  • 【Pywinauto库】12.2 pywinauto.element_info 后端内部实施模块
  • 正向代理与反向代理的异同
  • 从ENIAC到Linux:计算机技术与商业模式的协同演进——开源生态的崛起与重构