C++中Set主要用法

簡介

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容器中的全部迭代器都是常量迭代器(包括const_iteratoriterator成員類型)。它們不能用來修改它們所指向的內容,但能夠正常地增長和減小(除非它們自己也是常量)。
若是容器爲空,則返回的迭代器值不該被取消引用。 跟begin差很少(get

沒什麼用(

用法:

s.cbegin();

返回一個指向容器中結束元素的常量迭代器。 跟end差很少(

用法:

s.cend();

把當前集合(set)清空,讓當前集合的大小爲0

用法:

s.clear();

將在容器中x的個數返回,(count(x))

用法:

s.count(x);

顧名思義,反向開頭(就是結尾),沒什麼用(

用法:

s.crbegin();

顧名思義,反向結尾(就是開頭),沒什麼用(

用法:

s.crend();

就是insert

用法:

s.emplace(x);

在集合中插入新元素(若是惟一),並在插入位置上給出提示。這個新元素是使用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

相關文章
相關標籤/搜索