关联容器之map用法初步

本文将对关联容器中map的基本用法加以介绍,其内容摒弃全面性而注重实用性。对于更加详尽的讲解,请参考《C++ Primer》第五版第11章。

 

1. 什么是map?

map是一种数据结构。正如map一词在英文中的含义,它表示一种“映射”关系,具体来说就是将“关键字(key)”映射到“值(value)”。换言之,map即若干“关键字-值”对组成的集合。

map类型通常被称为“关联数组(associative array)”,它与一般的数组类似,不同之处在于其“下标”(关键字)不必是整数。

map不允许重复关键字,且对存入的元素按照关键字有序存储。在默认情况下,标准库使用关键字类型的 < 运算符来比较两个关键字,并按照升序进行存储。若关键字类型为自定义类型,则必须给出合法的比较函数。

 

2. map的定义与初始化

(1) map<关键字类型, 值类型> 名称; //定义一个空map

例1:定义一个名为mp的map,其关键字为string类型,值为整型。

map<string, int> mp;

(2) map<关键字类型, 值类型> 名称 = {{关键字1, 值1}, {关键字2, 值2}, ...}; //定义并初始化一个map

例2:定义并初始化一个名为mp的map,初始化时不必按照关键字的升序书写,value允许重复。

map<string, int> mp = {{"Alhaitham", 48}, {"Zhongli", 43}, {"Diluc", 49}, {"Albedo", 43}};

 

3. 向map添加元素

名称.insert({关键字, 值}); //向map中添加一个元素,只有当关键字不在map中时才插入

注:insert()函数的返回值为一个pair类型:pair.first为指向具有给定关键字的元素的迭代器,pair.second为bool类型,指出插入操作是否成功,即若该关键字已经存在则pair.second为false,表示未能成功插入。

例3:

map<string, int> mp = {{"Alhaitham", 48}, {"Zhongli", 43}, {"Diluc", 49}, {"Albedo", 43}};
auto ret1 = mp.insert({"Tighnari, 44"}); //ret1.second == true
auto ret2 = mp.insert("Diluc", 49); //ret2.second == false

 

4. 从map删除元素

名称.erase(关键字); //从map中删除具有给定关键字的元素,返回删除的元素数量(1或0)

例4:

map<string, int> mp = {{"Alhaitham", 48}, {"Zhongli", 43}, {"Diluc", 49}, {"Albedo", 43}};
int num1 = mp.erase("Albedo"); //num1 == 1
int num2 = mp.erase("Xiao"); //num2 == 0

 

5. map的下标操作

名称[关键字]; //返回具有给定关键字的元素的值,若该关键字不在map中则创建一个新元素并初始化(值默认为0)

例5:将“Alhaitham”对应的值更改为48,并添加一个新元素{"Tighnari, 44"}。

map<string, int> mp = {{"Alhaitham", 25}, {"Zhongli", 43}, {"Diluc", 49}, {"Albedo", 43}};
mp["Alhaitham"] = 48;
mp["Tighnari"] = 44;

使用此方法添加元素相较于insert()函数更为简洁。

 

6. 在map中查找元素

名称.count(关键字); //返回具有给定关键字的元素的数量(1或0)

例6:

map<string, int> mp = {{"Alhaitham", 48}, {"Zhongli", 43}, {"Diluc", 49}, {"Albedo", 43}};
int num1 = mp.count("Alhaitham"); //num1 == 1
int num2 = mp.count("Tighnari"); //num2 == 0

 

7. 遍历map中的元素

2017年发布的C++ 17标准提供了一种不使用迭代器的简洁方法。

for(auto [key, value]: 名称) { cout << key << " " << value << endl; } //依次输出每个元素的关键字和值

例7:

map<string, int> mp = {{"Alhaitham", 48}, {"Zhongli", 43}, {"Diluc", 49}, {"Albedo", 43}};
for(auto [key, value]: mp)
{ 
    cout << key << " " << value << endl;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值