c++set的使用詳解

一、set簡介

C++ STL(標準模板庫)中的set是一種集合容器,用於存儲不重複的元素。set中的元素按照一定的順序排列,通常從小到大。使用set時,需要包含頭文件#include <set>。

二、set的定義和基本操作

通過以下代碼,我們可以創建一個set並進行基本操作。

#include <set>
using namespace std;
int main(){
    //定義一個set,元素類型為int
    set<int> myset;
    //插入元素
    myset.insert(1);
    myset.insert(2);
    myset.insert(3);
    //遍歷輸出set中的元素
    for(set<int>::iterator iter=myset.begin();iter!=myset.end();++iter){
        cout<<"iter:"<<*iter<<endl;
    }
    //查找元素,返回值為迭代器
    set<int>::iterator iter=myset.find(2);
    if(iter!=myset.end()){
        //刪除元素,返回值為刪除的元素個數
        int num=myset.erase(iter);
        cout<<"num:"<<num<<endl;
    }
    //輸出set中的元素
    for(set<int>::iterator iter=myset.begin();iter!=myset.end();++iter){
        cout<<"iter:"<<*iter<<endl;
    }
    return 0;
}

運行結果如下:

iter:1
iter:2
iter:3
num:1
iter:1
iter:3

在以上代碼中,我們定義了一個元素類型為int的set,在其中插入了1、2、3三個元素,插入時set自動按照從小到大的順序排列。然後我們遍歷輸出了set中的元素。接着,我們查找元素2,並刪除該元素。最後,我們再次遍歷輸出set中的元素。

三、set的常用函數

1、插入元素

set中插入元素的函數有兩種:insert()和emplace()。

insert()函數會將元素插入到set中,並返回一個pair類型的值。當成功插入時,pair的first值為指向新插入元素的迭代器,second值為true;當插入不成功時,pair的first值為指向set中對應元素的迭代器,second值為false。代碼實例如下:

set<int> myset;
//使用insert()插入元素
pair<set<int>::iterator,bool> ret=myset.insert(3);
if(ret.second==false){
    cout<<"new element already exists"<<endl;
}
//使用insert()插入多個元素
int myints[]= {10,20,30,40,50};
myset.insert(myints,myints+5);
//使用emplace()插入元素
myset.emplace(25);

2、刪除元素

set中刪除元素的函數有三種:erase()、clear()和swap()。

erase()函數可以通過值或迭代器刪除set中的元素。

set<int> myset;
myset.insert(1);
myset.insert(2);
//使用erase()刪除元素
int num=myset.erase(1);
if(num==1){
    cout<<"erase success"<<endl;
}
//使用erase()刪除一定範圍內的元素
set<int>::iterator iter1=myset.begin();
set<int>::iterator iter2=myset.end();
myset.erase(iter1,iter2);

3、查找元素

set中查找元素的函數有4種:find()、count()、lower_bound()、upper_bound()。

find()函數查找set中是否有某個元素,返回值為迭代器。如果找到了該元素,返回指向該元素的迭代器;如果沒有找到,返回set::end()。代碼實例如下:

set<int> myset;
myset.insert(1);
set<int>::iterator it=myset.find(1);
if(it!=myset.end()){
    cout<<"element found in myset:"<<*it<<endl;
}else{
    cout<<"element not found in myset"<<endl;
}

count()函數查找set中某個元素的個數。set中只有0/1個元素相同,因此count()的返回值只能為0或1。代碼實例如下:

set<int> myset;
myset.insert(1);
int num=myset.count(1);
if(num==1){
    cout<<"element exists in myset"<<endl;
}else{
    cout<<"element not exists in myset"<<endl;
}

lower_bound()函數查找set中某個元素,並返回指向第一個不小於該元素的迭代器。如果找不到該元素,返回指向第一個不小於該元素的迭代器。代碼實例如下:

set<int> myset;
int myints[]= {10,20,30,40,50};
myset.insert(myints,myints+5);
set<int>::iterator it=myset.lower_bound(20);
cout<<"lower bound:"<<*it<<endl;

upper_bound()函數查找set中某個元素,並返回指向第一個大於該元素的迭代器。如果找不到該元素,返回指向第一個大於該元素的迭代器。代碼實例如下:

set<int> myset;
int myints[]= {10,20,30,40,50};
myset.insert(myints,myints+5);
set<int>::iterator it=myset.upper_bound(20);
cout<<"upper bound:"<<*it<<endl;

四、總結

本文詳細闡述了C++ STL中set容器的使用方法,包括了set容器的定義和基本操作、常用函數的介紹等相關知識。通過了解這些知識,我們可以更好地利用set容器來存儲和操作數據,提高程序的效率和可讀性。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/158947.html

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

相關推薦

  • 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
  • Linux sync詳解

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

    編程 2025-04-25
  • 神經網絡代碼詳解

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

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

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

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 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
  • Python輸入輸出詳解

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

    編程 2025-04-25

發表回復

登錄後才能評論