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

发表回复

登录后才能评论