C++容器(Map)

2

C++容器(Map)

  容器是C++非常方便的功能,今天给小伙伴们介绍map库,map库是C++中的字典,,其特点是字典中的每一项存储一个键值对,每一个键对应一个确定的值,键不能重复,在统计元素出现个数等题目中有很好的使用场景,也是小伙伴们必须掌握的一种数据结构。

pair容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;

int main() {

// 介绍map之前,首先介绍对组的概念。对组就是将两个元素绑定为一对,通常有三种创建方法。
// 和之前学的容器都不一样,需要在创建时需要传入两个类型,分别代表对组的第一个元素和第二个元素的类型。
// 可以通过初始化参数创建对组对象。
pair<string, int> p1("C++程序员", 30);
// 可以通过花括号创建对组对象。
pair<string, int> p2 = { "Java程序员", 27 };
// 也可以通过make_pair方法创建对组对象。
pair<string, int> p3 = make_pair("Python程序员", 25);

// 访问对组元素时,可以通过first访问第一个元素,second访问第二个元素,要注意first和second后面没有括号。
cout << p1.first << "的年龄为:" << p1.second << endl;
cout << p2.first << "的年龄为:" << p2.second << endl;
cout << p3.first << "的年龄为:" << p3.second << endl;

return 0;
}

1

map容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include<iostream>
#include<map>
using namespace std;


// 为了方便显示,在这里将打印操作定义为一个函数
// 注意,map中的顺序为插入元素的先后顺序,multimap的顺序为key从小到大的顺序,如果key无法比较则需要自定义比较函数,否则报错。
void printMap(map<string, int> m) {
for (map<string, int>::iterator it = m.begin(); it != m.end(); it++) {
cout << it->first << "的年龄为:" << it->second << endl;
}
}

int main() {

pair<string, int> p1("C++程序员", 30);
pair<string, int> p2 = { "Java程序员", 27 };
pair<string, int> p3 = make_pair("Python程序员", 25);
pair<string, int> p4 = make_pair("Python程序员", 26);

// 创建一个map容器,存放对组,其中对组的第一个元素称为map的key,对组的第二个元素称为map的value,可以它们称为键值对。
map<string, int> m;
// insert用于向容器中插入键值对。
m.insert(p1);
m.insert(p2);
m.insert(p3);
//当map容器中已经存在某个key,则再插入相同的key时则会插入失败,此时不会覆盖原来的value。想要修改可以通过m[key] = value进行修改。
//map容器有默认元素,即使没有初始化,也可以访问其中的元素,如果value的类型是int,则默认为0
m.insert(p4);
printMap(m);

// empty判断容器是否为空,为空则返回true,否则返回false
cout << "m是否为空:" << m.empty() << endl;
// size方法获取容器中的元素个数。
cout << "m的尺寸为:" << m.size() << endl;

// erase方法和insert相反,将map中的元素移除。
m.erase("Python程序员");
printMap(m);

cout << "m的尺寸为:" << m.size() << endl;

//find方法查找map中某个元素所在的位置,并且返回迭代器对象,在这里不进行演示。

// count方法判断某个key是否存在于字典之中。
// count值为0说明元素不在其中,count元素为1说明在字典中。
cout << "查找Python程序员:" << m.count("Python程序员") << endl;
cout << "查找C++程序员:" << m.count("C++程序员") << endl;
// 访问键对应的值时,可以采用类似数组的方式索引key,就可以得到key对应的value,想修改value的方式也是通过索引进行修改。但是multimap无法通过索引进行访问value,因为一个key会对应很多value。
cout << "C++程序员" << "的年龄为:" << m["C++程序员"] << endl;

// clear清空容器中的所有内容
m.clear();
cout << "m是否为空:" << m.empty() << endl;
cout << "m的尺寸为:" << m.size() << endl;

return 0;
}

1

C++小结

  字典无法通过索引下标进行遍历。使用字典时,只要记住4个重要的函数insert,erase,count,size和一个key索引即可。常常在数组中出现,如统计每一个元素出现的次数,遇到新元素时加入字典中,遇到旧元素,则对应的value加1即可,非常方便。因此小伙伴们一定要掌握它。

-------------本文结束感谢您的阅读-------------
0%