Set封装了C++中的集合,他的主要做用是排序和去重,咱们来详细看下:ios
------------------------------------------------------------------------------------------------------------------------------珂爱的分割线------------------------------------------------------------------------------------------------------------------------------c++
#include <set>
或函数
#include <bits/stdc++.h>
在写代码的时候,必须写上这两个头文件中的一个还有using namespace std;
,这样就能够定义set
了。工具
#include <set> #include <iostream> using namespace std; int main() { return 0; }
set<T> S;
T:C++任意一个类型,如:int, char, string, STL里的也能够,好比set<vector<int> > s1;
set<vector<pair<int, int> > > s2;
S:你定义的变量名,如下都用s代替spa
------------------------------------------------------------------------------------------------------------------------------珂爱的分割线------------------------------------------------------------------------------------------------------------------------------指针
连接炸了评论区找我(code
返回set容器第一个元素的迭代器对象
用法:排序
s.begin();
set::cbegin
C++11,慎用! 返回指向容器中第一个元素的常量迭代器。
set
容器中的全部迭代器都是常量迭代器(包括const_iterator
和iterator
成员类型)。它们不能用来修改它们所指向的内容,但能够正常地增长和减小(除非它们自己也是常量)。
若是容器为空,则返回的迭代器值不该被取消引用。 跟begin差很少(get
没什么用(
用法:
s.cbegin();
set::cend
C++11,慎用! 返回一个指向容器中结束元素的常量迭代器。 跟end差很少(
用法:
s.cend();
把当前集合(set)清空,让当前集合的大小为0
用法:
s.clear();
将在容器中x的个数返回,(
count(x)
)
用法:
s.count(x);
set::crbegin
C++11,慎用! 顾名思义,反向开头(就是结尾),没什么用(
用法:
s.crbegin();
set::crend
C++11,慎用! 顾名思义,反向结尾(就是开头),没什么用(
用法:
s.crend();
set::emplace
C++11,慎用! 就是insert
用法:
s.emplace(x);
set::emplace_hint
C++11,慎用! 在集合中插入新元素(若是惟一),并在插入位置上给出提示。这个新元素是使用arg做为其构造参数就地构造的。
只有在容器中没有其余元素与被放置的元素等效时才会进行插入(集合容器中的元素是惟一的)。
若是插入,这将有效地将容器大小增长一个。
位置中的值用做插入点的提示。尽管如此,元素仍将按照其内部比较对象描述的顺序插入到其相应的位置,但函数使用此提示开始搜索插入点,当实际插入点位于位置或接近该位置时,该过程会大大加快。
总结:最好别用(
用法:
咕
bool类型,若是当前几何还有元素,返回true,不然返回false
用法
if(s.empty()) cout << "集合是空的" << endl; else cout << "集合有元素" << endl;
返回一个指针,当前容器的末尾
用法
set<int>::iterator it = s.end();
删除一个元素或一个指针的元素
用法
std::set<int> myset; std::set<int>::iterator it; myset.erase (it); myset.erase (40);
在容器中搜索等价于val的元素,若是找到,则返回迭代器,不然返回迭代器给set::end。
s.find(x);
插入一个元素,详细点上面这个就能够去官网看了
查找第一个大于或等于x的数字,找到返回该数字的地址,不存在则返回end。
查找第一个小于或等于x的数字,找到返回该数字的地址,不存在则返回end。
目前容器有过的最大容量
cout << s.max_size() << endl;
目前容器的容量
cout << s.size() << endl;
------------------------------------------------------------------------------------------------------------------------------珂爱的分割线------------------------------------------------------------------------------------------------------------------------------
遍历须要有迭代器iterator
#include <set> #include <iostream> using namespace std; int main() { set<int> s; s.insert(1); s.insert(1); s.insert(4); s.insert(5); s.insert(1); s.insert(4); s.insert(1); s.insert(9); s.insert(1); s.insert(9); s.insert(8); s.insert(1); s.insert(0); for(set<int>::iterator it = s.begin(); it != s.end(); it++) cout << *it << " "; }
输出:
0 1 4 5 8 9
#include <set> #include <iostream> using namespace std; int main() { set<char> s; s.insert('a'); s.insert('b'); s.insert('d'); s.insert('b'); s.insert('a'); s.insert('b'); s.insert('c'); s.insert('b'); s.insert('c'); s.insert('c'); s.insert('a'); s.insert('a'); s.insert('a'); for(set<char>::iterator it = s.begin(); it != s.end(); it++) cout << *it << " "; }
输出:
a b c d
例题:
明明的随机数
就能够用set,其实他大可能是做为工具出如今题目里面,通常专门考这个的不多。
求评论QAQ