C++STL常用操作之set篇
原创
©著作权归作者所有:来自51CTO博客作者Alan_Lowe的原创作品,请联系作者获取转载授权,否则将追究法律责任
C++STL常用操作之set篇
简介:
1.元素唯一
2.排序
set也是c++中经常用到的容器,set是集合。set是集合,那么当然它内部的元素就是唯一的(集合的不重复性)。并且set中的元素还是已经排好序的,set和map一样,都是以红黑树为基础的数据结构。
1.构造
set<int> s;
s.insert(3);
s.insert(2);
s.insert(4);
s.insert(1);
s.insert(1);
s.insert(1);
for (auto it = s.begin(); it != s.end(); ++it)
cout << *it << endl;
我们可以看出,在构造的集合s当中一依次插入int型数据3、2、4、1、1、1后遍历输出的结果为1、2、3、4。这也说明了set确实是不允许重复元素,并且是排序好的。
2.常用函数
set<int> s;
s.insert(3);
s.insert(2);
s.insert(4);
s.insert(1);
cout << *s.begin() << endl; //返回set的第一个元素的迭代器
cout << *(--s.end()) << endl; //返回set最后一个元素后面一个位置的迭代器
if (s.empty()) //判断set是否为空
cout << "is empty" << endl;
else
cout << "is not empty" << endl;
cout << s.size() << endl; //输出set此时的元素个数
s.clear(); //清空,删除所有元素
cout << s.size() << endl;
运行结果:
set<int> s;
s.insert(3);
s.insert(1);
s.insert(1);
cout << s.count(1) << endl;
cout << s.count(2) << endl;
count用来计数某个key值出现过的次数,由于set和map一样,都是不允许重复数据的出现,所以count的返回值只能是0或1(集合中存在或者不存在)。
set<int> s;
s.insert(3);
s.insert(2);
auto it = s.find(1);
if (it != s.end())
cout << "YES" << endl;
else
cout << "NO" << endl;
it = s.find(3);
if (it != s.end())
cout << "YES" << endl;
else
cout << "NO" << endl;
find函数返回需要查找元素的迭代器,如果没有则返回end()。
3.删除
#include<iostream>
#include<set>
using namespace std;
int main() {
set<int> s;
s.insert(3);
s.insert(2);
s.insert(4);
s.insert(1);
s.insert(1);
for (auto it = s.begin(); it != s.end(); ++it)
cout << *it << endl;
cout << "**********" << endl;
s.erase(1); //给定key值的删除
for (auto it = s.begin(); it != s.end(); ++it)
cout << *it << endl;
cout << "**********" << endl;
s.erase(s.begin()); //给定迭代器的删除
for (auto it = s.begin(); it != s.end(); ++it)
cout << *it << endl;
cout << "**********" << endl;
s.erase(s.begin(), s.end()); //给定迭代器返回的删除
for (auto it = s.begin(); it != s.end(); ++it)
cout << *it << endl;
cout << "**********" << endl;
return 0;
}
最初我们set中的元素为1、2、3、4,删除了给定得key为1的元素后,set中元素还剩下2、3、4,删除了给定的迭代器set的第一个位置对应的元素(2)后,还剩下3、4,删除了给定迭代器范围(从头到尾)的元素后,set中不再有元素。
set常用操作
发现问题欢迎指正!