您的位置:

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"<


   

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容器来存储和操作数据,提高程序的效率和可读性。