一、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-tw/n/158947.html
微信掃一掃
支付寶掃一掃