簡介
Set封裝了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代替
------------------------------------------------------------------------------------------------------------------------------珂愛的分割線------------------------------------------------------------------------------------------------------------------------------
函式
鏈接炸了評論區找我(
set::begin
回傳set容器第一個元素的迭代器
用法:
s.begin();
set::cbeginC++11,慎用!
回傳指向容器中第一個元素的常量迭代器,
set容器中的所有迭代器都是常量迭代器(包括const_iterator和iterator成員型別),它們不能用來修改它們所指向的內容,但可以正常地增加和減少(除非它們本身也是常量),
如果容器為空,則回傳的迭代器值不應被取消參考, 跟begin差不多(
沒什么用(
用法:
s.cbegin();
set::cendC++11,慎用!
回傳一個指向容器中結束元素的常量迭代器, 跟end差不多(
用法:
s.cend();
set::clear
把當前集合(set)清空,讓當前集合的大小為0
用法:
s.clear();
set::count
將在容器中x的個數回傳,(
count(x))
用法:
s.count(x);
set::crbeginC++11,慎用!
顧名思義,反向開頭(就是結尾),沒什么用(
用法:
s.crbegin();
set::crendC++11,慎用!
顧名思義,反向結尾(就是開頭),沒什么用(
用法:
s.crend();
set::emplaceC++11,慎用!
就是insert
用法:
s.emplace(x);
set::emplace_hintC++11,慎用!
在集合中插入新元素(如果唯一),并在插入位置上給出提示,這個新元素是使用arg作為其構造引數就地構造的,
只有在容器中沒有其他元素與被放置的元素等效時才會進行插入(集合容器中的元素是唯一的),
如果插入,這將有效地將容器大小增加一個,
位置中的值用作插入點的提示,盡管如此,元素仍將按照其內部比較物件描述的順序插入到其相應的位置,但函式使用此提示開始搜索插入點,當實際插入點位于位置或接近該位置時,該程序會大大加快,
總結:最好別用(
用法:
咕
set::empty
bool型別,如果當前幾何還有元素,回傳true,否則回傳false
用法
if(s.empty())
cout << "集合是空的" << endl;
else
cout << "集合有元素" << endl;
set::end
回傳一個指標,當前容器的末尾
用法
set<int>::iterator it = s.end();
set::erase
洗掉一個元素或一個指標的元素
用法
std::set<int> myset;
std::set<int>::iterator it;
myset.erase (it);
myset.erase (40);
set::find
在容器中搜索等價于val的元素,如果找到,則回傳迭代器,否則回傳迭代器給set::end,
s.find(x);
set::insert
插入一個元素,詳細點上面這個就可以去官網看了
set::lower_bound
查找第一個大于或等于x的數字,找到回傳該數字的地址,不存在則回傳end,
set::upper_bound
查找第一個小于或等于x的數字,找到回傳該數字的地址,不存在則回傳end,
set::max_size
目前容器有過的最大容量
cout << s.max_size() << endl;
set::size
目前容器的容量
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/243.html
標籤:Windows
