STL 的 map 是其中一种常用的数据结构,它是一种关联式容器,它存储的是键值对(key-value pairs)。
每个元素都由一个键和一个值组成,键是唯一的,可以用来查找对应的值。map 的键值对是有序的,并且按照键的升序排列。
例如,如果我们想要把学生的名字映射到他们的成绩,可以使用一个 map 来存储这些信息:
map<string, int> student_scores;
student_scores["Tom"] = 80;
student_scores["Bob"] = 90;
student_scores["Alice"] = 95;
上面的代码中,我们定义了一个名为 student_scores 的 map,它将字符串类型的键映射到 int 类型的值。然后,我们用赋值运算符(=)来添加三个键值对:Tom 对应的成绩是 80,Bob 的成绩是 90,Alice 的成绩是 95。
我们可以使用下标运算符([])来访问 map 中的元素,例如:
cout << student_scores["Tom"] << endl; // 输出 80
这里我们使用下标运算符来查询 Tom 的成绩,输出的结果是 80
插入操作。我们可以使用 insert 方法来向 map 中添加元素,例如:
// 向 student_scores 中插入一个新元素
student_scores.insert(pair<string, int>("Tim", 75));
// 或者,也可以使用 make_pair 函数来创建一个 pair
student_scores.insert(make_pair("Tim", 75));
// 另外,也可以使用下标运算符来插入元素
student_scores["Tim"] = 75;
上面三种方法都可以用来向 map 中插入新元素。其中,第一种方法是直接创建一个 pair 对象,并将它传递给 insert 方法;第二种方法是使用 make_pair 函数来创建 pair 对象,然后再传递给 insert 方法;第三种方法是直接使用下标运算符来插入元素。
接下来是删除操作。我们可以使用 erase 方法来删除 map 中的元素,例如:
// 删除 student_scores 中的元素
student_scores.erase("Tom"); // 删除键为 "Tom" 的元素
student_scores.erase(student_scores.find("Bob")); // 删除键为 "Bob" 的元素
上面的代码中,我们使用 erase 方法删除了 student_scores 中的两个元素:键为 “Tom” 的元素和键为 “Bob” 的元素。
接下来是查找操作。我们可以使用 find 方法来查找 map 中的元素,例如:
// 查找 student_scores 中的元素
map<string, int>::iterator it = student_scores.find("Alice");
if (it != student_scores.end()) {
cout << "Found: " << it->first << " " << it->second << endl;
} else {
cout << "Not found" << endl;
}
上面的代码中,我们使用 find 方法来查找键为 “Alice” 的元素。如果找到了,就会返回一个迭代器,指向该元素;如果没有找到,就会返回 map 的尾部迭代器。因此,我们可以通过检查返回值是否等于尾部迭代器来判断元素是否存在。
除了 find 方法,我们还可以直接使用下标运算符来查找元素,例如:
int score = student_scores["Alice"];
cout << "Score: " << score << endl;
上面的代码中,我们直接使用下标运算符来查找键为 “Alice” 的元素。如果该元素存在,就会返回它的值;如果不存在,就会自动创建一个新的元素,键为 “Alice”,值为默认值(默认值取决于 map 的值类型,例如对于 int 类型的 map,默认值就是 0)。
除了上面提到的插入、删除、查找操作,map 还支持其他常用操作。例如,我们可以使用 size 方法来获取 map 中元素的个数:
int n = student_scores.size();
cout << "Number of elements: " << n << endl;
我们也可以使用 empty 方法来判断 map 是否为空:
if (student_scores.empty()) {
cout << "The map is empty" << endl;
} else {
cout << "The map is not empty" << endl;
}
另外,我们还可以使用 clear 方法来清空 map 中的所有元素:
student_scores.clear();
这些操作都是 map 常用的操作,可以方便地实现数据结构的基本功能。