一、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"<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"<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<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"<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<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<四、总结
本文详细阐述了C++ STL中set容器的使用方法,包括了set容器的定义和基本操作、常用函数的介绍等相关知识。通过了解这些知识,我们可以更好地利用set容器来存储和操作数据,提高程序的效率和可读性。