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