c++set詳解

一、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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 19:23
下一篇 2024-12-16 19:23

相關推薦

  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • Python Set元素用法介紹

    Set是Python編程語言中擁有一系列獨特屬性及特點的數據類型之一。它可以存儲無序且唯一的數據元素,這使得Set在數據處理中非常有用。Set能夠進行交、並、差集等操作,也可以用於…

    編程 2025-04-29
  • Python set去重保留原順序

    當一個列表中出現重複的元素時,為了去除這些重複元素可以使用Python提供的集合(set)數據結構,集合可以去除元素的重複出現。然而,這樣會導致原有的元素順序混亂,這時,需要使用一…

    編程 2025-04-27
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論