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