使用之前包含头文件 #include<set>
定义一个集合:和其他的容器类似 set<int> S; 这行代码就构造了一个空的集合S;
或者使用内部默认的构造函数 set<int> S = {3, 2, 1, 4, 5}; 用一个列表来给空的集合S来赋值,此时集合内部的抽象形式应该是如下图所示的:
EZA%24)XLN8JEQY.png)
insert() 操作:
使用S.insert(1); 表示往集合里面插入一个元素1 由于集合的元素不能重复,所以插入相当于无效
使用S.insert(7); 表示往集合里面插入一个元素7

find()操作
find函数会返回集合元素在集合中的位置,如果没有找到元素,则会返回end位置
auto iter = S.find(0); 因为当前集合里面没有0元素,所以此时iter就是S.end()
begin()操作和end()操作
begin操作会返回集合中的最小元素,end操作则是集合中最大元素的后一位,为前闭后开的区间
erase()操作
erase操作表示从集合中删除一个元素
代码展示
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> S = {3, 2, 1, 4, 5}; //集合的初始状态
// 插入.
S.insert(1);
S.insert(7);
// 查找与删除.
auto iter = S.find(0);
if (iter != S.end())
S.erase(iter);
iter = S.find(5);
if (iter != S.end())
S.erase(iter);
S.erase(5);
// 迭代器位置.
iter = S.begin();
cout << *iter << endl;
++iter; //当前元素位置的下一个位置(按照排好序的位置)
cout << *iter << endl;
--iter; //当前元素位置的上一个位置(也是排好序的位置)
cout << *iter << endl;
// 遍历集合, 为简便计我们不讨论常量迭代器.
for (auto iter = S.begin(); iter != S.end(); ++iter) //从头遍历到尾,也就是从最小元素遍历到最大元素
cout << *iter << ' ';
cout << endl;
for (auto riter = S.rbegin(); riter != S.rend(); ++riter) //表示逆序遍历,r表示逆序,也就是从最大元素遍历到最小元素
cout << *riter << ' ';
cout << endl;
for (const auto& x : S) //基于范围的for循环写法,每次从S中取出一个元素赋值给x,然后将x输出
cout << x << ' ';
cout << endl;
return 0;
}






Comments 1 条评论
顶一顶