一、c set類
c set類是c++ STL中的一個數據結構,它是一種關聯容器,用於存儲唯一且有序的元素。它可以採用紅黑樹、avl樹等數據結構實現,其底層的實現與使用者無關。在c set容器中,元素是唯一的,從而可以防止容器中存儲的元素出現重複。
c set類模板定義如下:
template<class T, class Compare = less, class Allocator = allocator > class set;
T:表示set容器中的數據類型,可以是任何數據類型。
Compare:比較函數,也叫做比較對象,對於實現自定義數據類型的c set類,需要傳遞自定義的比較函數,否則,默認使用std::less函數進行默認排序。
Allocator:內存分配器,用於指定內存的存儲位置,可以使用std::allocator類進行默認內存分配。
二、c set up o好噗四姑夫柚子
c set up是指從小到大的排序,而c set o是指從大到小的排序。默認情況下,c set採用從小到大的排序方式。如果用戶需要使用從大到小的排序方式,需要通過自定義比較函數來實現。下面是一個從大到小排序的示例:
set<int, greater > mySet; mySet.insert(1); mySet.insert(3); mySet.insert(2); for (auto i : mySet) cout << i << " ";
輸出結果為:3 2 1
三、c set 降序
c set容器是由於內部採用紅黑樹結構實現的,因此它的迭代器是一個雙向迭代器,而不是隨機訪問迭代器。在使用迭代器進行遍歷時,可以採取reverse_iterator的方式實現降序,而不需要使用sort等演算法手動進行排序。下面是一個示例:
set mySet{ 1,2,3 }; for (auto it = mySet.crbegin(); it != mySet.crend(); it++) cout << *it << " ";
輸出結果為:3 2 1
四、c set的實現
c set容器是一個基於紅黑樹實現的關聯式容器,它與vector、deque等順序式容器不同。在c set容器中,元素是唯一的,從而可以防止容器中存儲的元素出現重複。紅黑樹是一種二叉查找樹,它必須滿足以下性質:
- 每個節點都是紅色或黑色
- 根節點是黑色
- 每個葉子節點(NULL節點)是黑色
- 如果一個節點是紅色的,則它的兩個子節點都是黑色的
- 從一個節點到該節點的所有葉子節點的路徑上包含相同數目的黑色節點
紅黑樹的優點在於:
- 查找和插入操作的時間複雜度O(logN)
- 插入、刪除元素時,保持set有序性
- 支持自定義比較函數和默認排序
下面是一個c set的簡單實現代碼:
#include #include using namespace std; int main() { set mySet; mySet.insert(1); mySet.insert(2); mySet.insert(3); for (auto i : mySet) cout << i << " "; return 0; }
五、c set用法
c set容器的用法與vector、deque等容器相似,通過insert和erase等函數來實現對容器中元素的增、刪操作,支持隨機訪問、迭代器遍歷等操作。下面是一些常用的c set用法示例:
1、查找元素
set mySet{ 1,2,3 }; if (mySet.find(2) != mySet.end()) cout << "2 is found" << endl;
2、統計元素出現次數
set mySet{ 1,1,2,3 }; cout << "1 occurred " << mySet.count(1) << " times" << endl;
3、刪除元素
set mySet{ 1,2,3,4 }; mySet.erase(2); for (auto i : mySet) cout << i << " ";
輸出結果為:1 3 4
六、c setw函數
c setw函數用於控制輸出時所佔的列數,通常用於表格型的輸出。c++設置setw函數的方法如下:
cout << setw(5) << "1"; cout << setw(5) << "2"; cout << setw(5) << "3";
輸出結果為:
1 2 3
七、c set有序
c set容器有序,這意味著元素在插入時會根據元素的值進行排序,因此,c set中的元素是有序的。在c set中,可以通過自定義比較函數來控制元素的排序規則,從而實現多種排序方式。下面是一個根據字元串長度排序的示例:
struct StringLenComp { bool operator()(const string &s1, const string &s2) const { return s1.size() < s2.size(); } }; set mySet{ "aaa", "bb", "ccccc" }; for (auto i : mySet) cout << i << " ";
輸出結果為:bb aaa ccccc
八、c set的頭文件
c set容器是c++ STL中的一種關聯式容器,因此其頭文件為set.h。但是,在c++標準庫中,set容器的頭文件為set,並且位於std命名空間之內,因此設置頭文件如下:
#include using namespace std;
九、set up
set up是指從小到大的排序方式,在c set容器中,默認的排序方式即為set up。下面是一個示例代碼:
set mySet; mySet.insert(1); mySet.insert(3); mySet.insert(2); for (auto i : mySet) cout << i << " ";
輸出結果為:1 2 3
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/271613.html