📅  最后修改于: 2023-12-03 14:59:45.408000             🧑  作者: Mango
C++ STL(Standard Template Library)是C++的一个重要组成部分,它提供了丰富的容器、算法、迭代器等工具,封装了常见的数据结构和算法,可以让开发者更轻松地开发高效、可读性强的代码。
在STL中,集合(Set)和映射(Map)是两种常见的数据结构,类似于数学中的集合和映射。集合中不允许重复元素,而映射则是一种键-值对的数据结构。
集合(Set)是STL中的一个容器,其中的元素不能重复。STL的集合基于红黑树实现,因此集合中的元素总是有序的。
可以使用以下语法定义一个集合:
#include <set>
std::set<int> mySet;
这定义了一个空的整数集合。
也可以在定义时初始化集合,例如:
std::set<int> mySet = {1, 2, 3};
这样就定义了一个包含元素1、2、3的整数集合。
可以使用以下方法向集合中插入元素:
mySet.insert(1);
mySet.insert(2);
mySet.insert(3);
这样就向集合中插入了元素1、2、3。
插入元素时,如果集合中已经有相同的元素,则插入操作会被忽略。
可以使用以下方法访问集合中的元素:
std::set<int>::iterator it;
for (it = mySet.begin(); it != mySet.end(); it++) {
std::cout << *it << " ";
}
这样就可以输出集合中的所有元素。
可以使用以下方法查找集合中的元素:
if (mySet.find(1) != mySet.end()) {
std::cout << "Found!" << std::endl;
}
这样就可以查找集合中是否包含元素1。
可以使用以下方法从集合中删除元素:
mySet.erase(1);
这样就从集合中删除了元素1。
下面是一个使用STL集合的示例程序,它输入一些整数,并输出去重后的整数列表。
#include <iostream>
#include <set>
int main() {
int n, x;
std::set<int> mySet;
std::cin >> n;
for (int i = 0; i < n; i++) {
std::cin >> x;
mySet.insert(x);
}
std::set<int>::iterator it;
for (it = mySet.begin(); it != mySet.end(); it++) {
std::cout << *it << " ";
}
return 0;
}
映射(Map)是STL中的一个容器,存储的是键-值对。STL的映射也是基于红黑树实现的,因此所有的键都是有序的。
可以使用以下语法定义一个映射:
#include <map>
std::map<std::string, int> myMap;
这定义了一个空的字符串到整数的映射。
也可以在定义时初始化映射,例如:
std::map<std::string, int> myMap = {{"apple", 1}, {"banana", 2}, {"pear", 3}};
这样就定义了一个包含三个键值对的字符串到整数的映射。
可以使用以下方法向映射中插入元素:
myMap.insert(std::make_pair("orange", 4));
这样就向映射中插入了一个键值对,键是"orange",值是4。
插入键值对时,如果映射中已经有相同的键,则插入操作会覆盖原有的值。
可以使用以下方法访问映射中的元素:
std::cout << myMap["apple"] << std::endl;
这样就可以输出键"apple"对应的值。
可以使用以下方法查找映射中的元素:
if (myMap.count("apple") > 0) {
std::cout << "Found!" << std::endl;
}
这样就可以查找映射中是否包含键"apple"。
可以使用以下方法从映射中删除元素:
myMap.erase("apple");
这样就从映射中删除了键"apple"和对应的值。
下面是一个使用STL映射的示例程序,它输入一些字符串和整数,并输出对应的键值对列表。
#include <iostream>
#include <map>
int main() {
int n, x;
std::string s;
std::map<std::string, int> myMap;
std::cin >> n;
for (int i = 0; i < n; i++) {
std::cin >> s >> x;
myMap[s] = x;
}
std::map<std::string, int>::iterator it;
for (it = myMap.begin(); it != myMap.end(); it++) {
std::cout << it->first << " " << it->second << std::endl;
}
return 0;
}
STL的集合和映射是两种常用的数据结构,它们可以帮助我们快速地去重、查找数据,并且保持数据有序。使用STL容器可以使代码更紧凑、可读性更强,值得学习和掌握。