C++ map容器 学习总结
-----------------------------------------------map/multimap容器
map/multimap特性
map相对于set区别,map具有键值和实值,所有元素根据键值自动排序
pair的第一元素被称为键值,第二元素被称为实值
map也是以红黑树作为底层实现机制
同时map与set类似 不能进行迭代器修改键值,但是可以改变实值
而map和multimap区别在于,map不允许相同key值存在,multimap则允许相同的key值存在
-------------map常用API
map构造函数
map<T1,T2> mapTT; map默认构造函数
map(const map& mp); 拷贝构造函数
map赋值操作
map& operator= (const map& mp); 重载=操作符
swap(mp); 交换两个集合容器
map大小操作
size(); 返回容器元素个数
empty(); 判断容器是否为空
map插入数据元素操作
map.insert(...); 往容器里插入元素,并返回pair<iterator,bool>
map<int,string> mapStu;
//第一种 通过pair方式插入对象
mapStu.insert(pair<int,string>(3,"小张"));
//第二种 通过pair方式插入对象
mapStu.insert(make_pair(-1,"小张"));
//第三种 通过value_type的方式插入独享
mapStu.insert(map<int,string>::value_type(1,"小张"));
//第四种 通过数组方式进行插入
mapStu[3] = "小张";
mapStu[5] = "小李";
PS:
1、前三种方法,采用的是insert()方法,该方法返回值为pair<iterator,bool>
2、第四种方法很直观,但存在一个性能问题:插入3时,先在mapStu中查找主键为3的项,若没发现,则将一个键为3
,值为初始化的对组插入到mapStu当中,然后再将值修改成"小张",若发现存在3这个键,则修改这个键对应的value
3、string strName = mapStu[2]; ......取操作和插入操作
只有当mapStu存在2这个键的时候才是正确的取操作,否则将会自动插入一个实例,键为2,值为初始值!!
map删除操作
clear(); 清空
erase(pos); 删除迭代器所指向元素,返回下一个元素迭代器
earse(beg,end); 删除区间所有元素,返回下一个元素的迭代器
earse(key); 删除容器中值为key的元素
map查找和统计
find(key); 查找key是否存在,若存在,返回该键的元素迭代器,若不存在,返回set.end()
count(key); 统计key元素个数(对于map,返回1、0)
lower_bound(keyElem); 返回第一个key>=keyElem的迭代器
upper_bound(keyElem); 返回第一个key>keyElem的迭代器
equal_range(keyElem); 返回容器中key与keyElem想的的上下限的两个迭代器
map排序
1、默认根据key值小->大排序
2、利用仿函数,自定义排序原则(同set)
class cmp {
public:
bool operator() (int v1,int v2) {
return v1 > v2;
}
}
map<int,int,cmp>::iterator
利用迭代器遍历
it->first,it->second
或(*it).first,(*it).second
__EOF__

本文链接:https://www.cnblogs.com/0105XiaoyeZhang/p/17065932.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!