0

0

c++ set容器用法 c++ set自动排序与去重【实例】

尼克

尼克

发布时间:2025-12-26 10:20:02

|

506人浏览过

|

来源于php中文网

原创

set是C++ STL基于红黑树实现的有序去重关联容器,支持O(log n)插入/查找/删除,默认升序;不可下标访问或修改元素,可自定义排序规则,重复插入无效。

c++ set容器用法 c++ set自动排序与去重【实例】

set 是 C++ STL 中的关联容器,底层通常基于红黑树实现,它天然支持自动排序和元素去重,插入、查找、删除时间复杂度均为 O(log n)。

set 的基本用法与自动排序

定义一个 set 后,所有插入的元素会按升序自动排列(默认使用 std::less 比较规则)。无需手动调用 sort,也不用担心顺序问题。

示例:

#include 
#include 
using namespace std;

int main() {
    set s;
    s.insert(5);
    s.insert(1);
    s.insert(8);
    s.insert(1); // 重复插入,无效

    for (int x : s) {
        cout << x << " "; // 输出:1 5 8
    }
}

set 的去重机制

set 不允许重复元素。相同值的多次 insert 只保留一个;尝试插入已存在的元素时,操作被忽略,且返回一个 pair,其中 second 表示是否成功插入。

立即学习C++免费学习笔记(深入)”;

Tana
Tana

“节点式”AI智能笔记工具,支持超级标签。

下载

常用判断方式:

  • auto ret = s.insert(x);ret.second 为 true 表示新元素插入成功
  • s.find(x) != s.end() 判断是否存在
  • s.count(x) 返回 0 或 1(注意:对 set 来说 count 效率不如 find)

自定义排序规则(降序或结构体)

可通过传入比较函数对象改变默认升序行为。例如实现降序:

set> s_desc; // 降序
s_desc.insert(3); s_desc.insert(1); s_desc.insert(4);
// 遍历输出:4 3 1

对结构体排序需提供仿函数或 lambda(C++20 起支持直接用 lambda 声明,但需注意生命周期):

struct Person {
    string name;
    int age;
};
struct CompareByAge {
    bool operator()(const Person& a, const Person& b) const {
        return a.age < b.age; // 按年龄升序
    }
};
set people;

常见操作与注意事项

  • 不能通过下标访问(s[0] 非法),只能用迭代器遍历或 find 查找
  • 元素是 const 的:迭代器解引用后不可修改(*it = 10 编译报错),如需修改应先 erase 再 insert
  • 清空用 s.clear(),判空用 s.empty(),大小用 s.size()
  • 若需保留重复元素,改用 multiset;若需哈希无序去重,改用 unordered_set

相关专题

更多
Sass和less的区别
Sass和less的区别

Sass和less的区别有语法差异、变量和混合器的定义方式、导入方式、运算符的支持、扩展性等。本专题为大家提供Sass和less相关的文章、下载、课程内容,供大家免费下载体验。

201

2023.10.12

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.11.20

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

387

2023.09.04

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

524

2023.09.20

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

197

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

189

2025.07.04

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

197

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

189

2025.07.04

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

3

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号