
点击蓝字 关注我们

第十三节 map容器

C++中的map容器是一种关联容器,它可以存储键值对的数据,每个键唯一地映射到一个值。在map容器中,键的类型和值的类型可以不同,但每个键都必须是唯一的。它的数据结构和上节介绍的set容器一样同样是基于红黑树实现。我们接下来看一下关于map容器的基本操作。
1.创建对象:
map容器创建对象,首先要包含头文件。
#include<map>
之后在创建的时候要注意map容器要创建一个存储键值对的对象。
map<int,string>Stu;
我们创建一个名为Stu的容器,键值对的类型为<int,string>,也就是说,键的类型是int,值的类型是string,他们共同组成了这个对象。接下来我们看一下它的具体操作。
2.元素的增删操作:
我们可以使用数组去创建容器的具体对象,或者使用insert函数去插入对象。对于删除元素,我们可以使用erase函数。
map<int,string>Stu;//1.使用数组方式去创建具体对象Stu[1] ="Rose";Stu[2] = "Mary";//2.使用insert方式去插入具体对象Stu.insert(pair<int, string>(3,"WenTen"));//使用erase删除元素Stu.erase(3);
我们使用erase删除了键值为3的元素,此时容器中还有两对元素。
3.访问元素操作:
在map容器中,元素的访问主要通过键(key)来实现。使用键来访问map中的元素,可以通过下标操作符或者使用find函数。
map<int,string>Stu;Stu[1] ="Rose";Stu[2] = "Mary";Stu.insert(pair<int, string>(3,"WenTen"));cout << "Stu[3]:" << Stu[3] << endl;cout << Stu.size() << endl;cout << "Stu[4]:" << Stu[4] << endl;cout << Stu.size() << endl;
在这里我们使用下标去查找键为3的元素,找到并返回它的值。接下来我们又查找键为4的值,但是我们的容器中并没有该对象。此时,我们将会自动创建键为4的对象,并将值默认为0,我们可以使用size去输出容器的大小来验证这一结论是否正确。
Stu[3]:WenTen3Stu[4]:4
我们发现,当查找键为4的值,它的值为空的,此时容器的大小(元素个数)也发生了变化,说明系统默认创建了一个键为4的元素,值默认为0。
我们使用find去查找元素:
map<int, string>::iterator it = Stu.find(1);if (it != Stu.end()) {cout << "key=" << it->first<<"\t" << "value=" << it->second << endl;}else {cout << "未找到键值为2的元素" << endl;}
find函数返回一个迭代器,指向键所在的位置,在这里我们指向了键为1的元素所在的位置。通过检查迭代器是否等于end(),可以判断是否找到了对应的键。我们可以使用成员访问运算符->来访问键值对中的成员,在这里我们使用it->first访问键,使用it->second访问值。
key=1 value=Rose
我们可以使用迭代器访问遍历输出容器中的所有元素。
for (map<int, string>::iterator it = Stu.begin(); it != Stu.end(); it++) {cout << "Stu[" << it->first << "]" << "\t" << it -> second << endl;}
结果如下:
Stu[1] RoseStu[2] MaryStu[3] WenTenStu[4]
4.比较操作:
我们在对map容器中的元素进行比较操作时,都是对键进行比较,比如说:
1.upper_bound,用于在容器中找到大于给定值的第一个元素的迭代器。
map<int, string>::iterator it = Stu.upper_bound(1);if (it != Stu.end()) {cout << "key=" << it->first<<"\t" << "value=" << it->second << endl;}else {cout << "未找到键值大于1的元素" << endl;}
结果如下:
key=2 value=Mary
2.lower_bound,用于在容器中找到大于等于给定值的第一个元素的迭代器。结果为:
key=1 value=Rose
我们在进行比较的时候首先要保证键是有序的,其实map容器本来就是按照键的顺序存储的,默认为升序。我们仍然可以使用上节同样的方式,使用自定义比较函数实现降序排列:
#include<iostream>using namespace std;#include<map>class Mycompare{public:bool operator()(int v1, int v2)const{return v1 > v2;}};int main() {map<int,string,Mycompare>Stu;Stu[1] ="Rose";Stu[2] = "Mary";Stu.insert(pair<int, string>(3,"WenTen"));for (map<int, string>::iterator it = Stu.begin(); it != Stu.end(); it++) {cout << "Stu[" << it->first << "]" << "\t" << it->second << endl;}system("pause");return 0;}
结果如下:
Stu[3] WenTenStu[2] MaryStu[1] Rose
map容器的相关操作的讲解到此结束,感谢观看!欢迎各位的点赞与关注!您的点赞和关注是我学习更新的动力!
END
往期推荐
C++高级学习:第十二节-set容器
C++高级学习:第十一节-stack&queue容器
C++高级学习:第十节-list容器(下)
C++高级学习:第九节-list容器(上)

分享、在看与点赞,至少我要拥有一个吧




