STL笔记(5)-map/multimap

map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。

map中key值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排列规则插入,所以不能指定插入位置。

map的具体实现采用红黑树变体的平衡二叉树的数据结构。在插入操作和删除操作上比vector快。

map可以直接存取key所对应的value,支持[]操作符,如map[key]=value。

multimap与map的区别:map支持唯一键值,每个键只能出现一次;而multimap中相同键可以出现多次。

multimap不支持[]操作符。


使用前准备:

#include <map>

using namespace std;


默认构造:

map<T1,T2> map TT;

multimap<T1,T2> multimap TT;


map的插入与迭代器:

三种方式:

1.通过pair的方式插入对象,例如:

map.insert(pair<int,string>(3,"小张“));

2.通过value_type的方式插入对象,例如:

map.insert(map<int,string>::value_type(1,"小李"));

3.通过数组方式插入值:

map[3]="小刘";

map[5]="小王";

第三种方式非常直观,但存在一个性能问题。插入3时,先在map中查找主键为3的项,若没发现,则将一个键为3,值为初始化值的对组插入到map中,然后再将值修改为"小刘"。若发现已存在这个键,则修改这个键对应的value。

前两种方式,采用的是insert()方法,该方法返回值为pair<iterator,bool>

pair<map<int,string>::iterator,bool> pairResult=mapStu.insert(pair<int,string>(3,"小张"));

如果插入成功,(pairResult.first)->first==3,(pairResult.first)->second=="小张",pairResult.second==true


map的插入与迭代器

map<T1,T2,less<T1>> mapA;

map<T1,T2,greater<T1>> mapB;

less与greater用法见set,less<T1>与greater<T1>可以替换成其他的函数对象functor


map的插入与迭代器

map.begin();

map.end();

map.rbegin();

map.rend();


map对象的拷贝构造与赋值

map(const map &mp);

map& operator=(const map &mp);

map.swap(mp);


map的大小

map.size();

map.empty();


map的删除

map.clear();//删除所有

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

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

map.erase(keyElem);删除容器中key为keyElem的对组

map.equal_range(keyElem);//返回容器中key与keyElem相等的上下限的两个迭代器。上限是闭区间,下限是开区间,如[beg,end)。此函数返回两个迭代器,而这两个迭代器被封装在pair中。


map的查找

map.find(key);查找key是否存在,若存在,返回该键的元素的迭代器,若不存在,返回map.end();

map.count(keyElem);返回容器中key为keyElem的对组个数。对map来说,只能是0或1,对于multimap来说,值可能大于1。

map.lower_bound(keyElem);返回第一个key>=keyElem的元素的迭代器。

map.upper_bound(keyElem);返回第一个key>keyElem元素的迭代器




1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可 6私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。
C++ STL中的mapmultimap是关联容器,用于存储键值对(key-value pairs),其中每个键(key)唯一对应一个值(value)。 map是一个有序容器,根据键的大小进行自动排序,默认按照键的升序进行排序。每个键只能在map中出现一次,如果尝试插入具有相同键的元素,新元素将替代旧元素。 multimap也是一个有序容器,与map不同的是,它允许多个具有相同键的元素存在。多个具有相同键的元素将按照插入的顺序进行存储,而不会自动排序。 这两个容器都提供了一系列的操作函数,如insert、erase、find等,用于插入、删除和查找元素。 以下是一个使用map的简单示例: ```cpp #include <iostream> #include <map> int main() { std::map<std::string, int> scores; scores.insert(std::make_pair("Alice", 90)); scores.insert(std::make_pair("Bob", 80)); scores.insert(std::make_pair("Charlie", 70)); // 查找并输出Bob的分数 std::cout << "Bob's score: " << scores["Bob"] << std::endl; // 遍历并输出所有键值对 for (const auto& pair : scores) { std::cout << pair.first << ": " << pair.second << std::endl; } return 0; } ``` 上述示例中,我们创建了一个存储string类型键和int类型值的map容器scores。通过insert函数依次插入了三个键值对。然后我们通过scores["Bob"]来获取Bob的分数,并输出结果为80。 接着我们使用范围-based for循环遍历map中的所有键值对,并输出每个键值对的键和值。 multimap的用法与map类似,只是它允许多个具有相同键的元素存在。 这些关联容器在查找和插入操作上具有较高的效率,特别适用于需要根据键进行快速查找的场景。在实际应用中,你可以根据自己的需求选择适合的容器类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值