set获取元素_C++与STL入门(4):关联容器:集合set
回复set:获取csdn论坛对set集合关联容器的讲解set使用前需要包含set的详细用法在CSDN论坛中讲的相当清楚,这里再把常用到的子函数和特性进行展示。set的两个特点:①set内的元素是有序的。②集合具有唯一性,集合内的元素都是唯一不重复的。set的子函数:begin()返回指向第一个元素的迭代器end()返回指向最后一个元素的迭代器clear()清空集合count()返回某个值...
回复set:获取csdn论坛对set集合关联容器的讲解
set使用前需要包含
set的详细用法在CSDN论坛中讲的相当清楚,这里再把常用到的子函数和特性进行展示。
set的两个特点:
①set内的元素是有序的。
②集合具有唯一性,集合内的元素都是唯一不重复的。
set的子函数:
begin()
返回指向第一个元素的迭代器
end()
返回指向最后一个元素的迭代器
clear()
清空集合
count()
返回某个值元素的个数
empty()
判断集合是否为空,为空返回true
equal_range()
返回集合中与给定值相等的上下限两个迭代器
erase()
删除集合中元素
find()
返回一个指向被查找到元素的迭代器
get_allocator()
返回集合的分配器
insert()
在集合中插入元素
lower_bound()
返回指向大于或等于某值的第一个元素的迭代器
key_comp()
返回一个用于元素间值比较的函数
max_size()
返回集合能容纳的元素的最大限值
rbegin()
返回指向集合中最后一个元素的反向迭代器
rend()
返回指向集合中第一个元素的反向迭代器
size()
集合中元素的数目
swap()
交换两个集合变量
upper_bound()
返回大于某个值元素的迭代器
value_comp()
返回一个用于比较元素间值的函数
具体用例展示:
展示迭代器、begin、end用法
展示定义时左闭右开
展示有序性质
#include #include using namespace std;int main(){ int myints[] = {6, 5, 4, 3, 2, 1}; set<int> myset(myints, myints + 6); //左闭右开 cout << "myset contains:"; for (set<int>::iterator it = myset.begin(); it != myset.end(); it++) //定义迭代器、使用begin、end函数 cout << ' ' << *it; //对迭代器取内容可以直接获取内容 cout << '\n'; return 0;}
输出结果:
倘若我们将654321改为655321
则可以看出集合的唯一性:
insert 、erase、size 函数使用:
#include #include using namespace std;int main(){ int myints[] = {6, 5, 5, 3, 2, 1}; set<int> myset(myints, myints + 6); //左闭右开 cout << "myset contains:"; for (set<int>::iterator it = myset.begin(); it != myset.end(); it++) //定义迭代器、使用begin、end函数 cout << ' ' << *it; //对迭代器取内容可以直接获取内容 cout << '\n'; cout << myset.size() << '\n'; //集合中元素个数 myset.erase(5); cout << "after erase '5' myset contains:"; for (set<int>::iterator it = myset.begin(); it != myset.end(); it++) //erase函数 cout << ' ' << *it; cout << '\n'; myset.insert(5); cout << "after insert '5' myset contains:"; for (set<int>::iterator it = myset.begin(); it != myset.end(); it++) //insert函数 插入后仍然具备有序性 cout << ' ' << *it; cout << '\n'; return 0;}
结果:
find 、lowerbound、upperbound函数的使用:
#include #include using namespace std;int main(){ int myints[] = {6, 5, 5, 3, 2, 1}; set<int> myset(myints, myints + 6); //左闭右开 cout << "myset contains:"; for (set<int>::iterator it = myset.begin(); it != myset.end(); it++) //定义迭代器、使用begin、end函数 cout << ' ' << *it; //对迭代器取内容可以直接获取内容 cout << '\n'; set<int>::iterator it=myset.find(5);//操作后it指向5; for (; it != myset.end(); it++) cout << ' ' << *it; it=myset.upper_bound(1);//it指向比1大第一个,即2 cout<<'\n'; for (; it != myset.end(); it++) cout << ' ' << *it; it=myset.lower_bound(1);//it指向1 cout<<'\n'; for (; it != myset.end(); it++) cout << ' ' << *it; return 0; }
结果:
例题:安迪的第一个字典
输入一个文本,找出所有不同的单词(连续的字母排列),按照字典序从小到大输出。输出小写。
样例输入:
Good morning ! Good afernoon! Zhao tong xue !
分析:采用set和string string直接包含了小于运算,所以,录入集合后再输出就可以得到题目的结果。
#include #include #include #include using namespace std;set<string> dict; //定义一个string类型的集合int main(){ string s, buf; while (cin >> s) { for (int i = 0; i < s.length(); i++) //string 子函数,判断字符串长度 if (isalpha(s[i])) s[i] = tolower(s[i]); //isalpha用于判断是否为英文字母,tolower用于转换为小写字母 else s[i] = ' '; //不是英文字母则转换为空格 stringstream ss(s); //将转换后的s重载入ss流 while (ss >> buf) dict.insert(buf); //读取ss流已经保证全部为单词,并录入到集合 } for (set<string>::iterator it = dict.begin(); it != dict.end(); it++) cout << *it << '\n'; //输出集合 return 0;}
得到的结果:
以上就是今天set用法的介绍。
更多推荐
所有评论(0)