C++的set是一个标准库中的容器,提供了有序关联容器的功能。一个set中的元素是按照特定的顺序排列的,并且每个元素只能在set中出现一次,而且这个元素的值可以作为关键字来使用。下面我们将详细介绍set的主要功能和应用。
1. set的定义和基本操作
定义一个set
定义一个set需要包含头文件<set>
,同时set是一个泛型类,可以为任意类型定义一个set对象,set中的元素必须是可比较的(比如可以进行小于、大于等比较操作),在定义时还可以传入比较器来实现自定义排序。
#include <set>
//定义set<int>类型的对象
std::set<int> intSet;
//定义自定义排序的set<string>类型对象
struct cmp {
bool operator() (const string& a, const string& b) const {
return a.size() < b.size();
}
}
std::set<string, cmp> strSet;
set的插入和删除操作
set中的元素是按序进行存储的,因此无法使用数组的形式进行访问元素。set提供insert和erase方法来插入和删除元素。
//插入元素1, 2, 3
intSet.insert(1);
intSet.insert(2);
intSet.insert(3);
//删除元素2
intSet.erase(2);
set的遍历
set中的元素是有序的,默认是按照从小到大的顺序排序的,我们可以使用迭代器对它进行遍历。
//遍历输出set中所有元素
for(auto it = intSet.begin(); it != intSet.end(); it++) {
std::cout << *it << " ";
}
//输出结果:1 3
2. set的高级应用
2.1 统计单词个数
假设我们有一篇英文文章,我们需要统计每个单词出现的次数。
#include <iostream>
#include <set>
#include <string>
int main() {
std::string article = "This is a test article for test the usage of C++ set";
std::set<std::string> wordSet;
std::string word = "";
for(int i = 0; i < article.length(); i++) {
if(article[i] == ' ' || article[i] == '.') {
//如果单词已经结束,则插入到set中
if(!word.empty()) {
wordSet.insert(word);
word = "";
}
} else {
word += article[i];
}
}
for(auto it = wordSet.begin(); it != wordSet.end(); it++) {
std::cout << "单词 " << *it << " 出现次数为:" << wordSet.count(*it) << std::endl;
}
return 0;
}
//输出结果:
/*
单词 C++ 出现次数为:1
单词 This 出现次数为:1
单词 a 出现次数为:1
单词 article 出现次数为:1
单词 for 出现次数为:1
单词 is 出现次数为:1
单词 of 出现次数为:1
单词 set 出现次数为:1
单词 test 出现次数为:2
单词 the 出现次数为:1
单词 usage 出现次数为:1
*/
2.2 合并多个set
假设我们有多个set,需要将它们合并为一个大的set,我们可以使用set提供的insert方法,它会自动进行去重操作。
#include <iostream>
#include <set>
int main() {
std::set<int> set1 = {1, 2, 3};
std::set<int> set2 = {2, 3, 4};
std::set<int> set3 = {3, 4, 5};
std::set<int> set4;
set4.insert(set1.begin(), set1.end());
set4.insert(set2.begin(), set2.end());
set4.insert(set3.begin(), set3.end());
for(auto it = set4.begin(); it != set4.end(); it++) {
std::cout << *it << " ";
}
//输出结果为:1 2 3 4 5
return 0;
}
以上就是set的详细介绍,set的应用场景非常广泛,比如统计单词个数、合并多个set等等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ set到底是什么 - Python技术站