讲师中心 微信公众号
AI工具推荐 视频效率加速

C++ set容器如何去重_C++ STL set用法与元素查找实例

大伟吖_2493

大伟吖_2493

发布时间:2025-11-27 12:03:05

|

204人浏览过

|

来源于php中文网

原创

set通过红黑树实现自动去重,插入重复元素时无效并返回失败标志,例如insert(5)两次只保留一个;自定义类型需重载<运算符定义比较规则,否则无法正确去重;查找元素可用find()或count(),时间复杂度O(log n),前者返回迭代器后者返回0或1,常用于判断存在性。

c++ set容器如何去重_c++ stl set用法与元素查找实例

在C++中,set容器天然具备去重功能,这是由其底层实现决定的。set基于红黑树(一种自平衡二叉搜索树)实现,插入元素时会自动排序并拒绝重复值。因此,只要使用set存储数据,就能在插入过程中自动完成去重,无需额外操作。

set如何实现自动去重

当你向set中插入一个已存在的元素时,插入操作不会生效,且返回一个表示是否插入成功的标志。具体行为如下:

  • 插入成功:元素不存在于set中,被添加进去。
  • 插入失败:元素已存在,set保持不变。
示例代码:
#include <iostream>
#include <set>
using namespace std;

int main() {
    set<int> nums;
    nums.insert(5);
    nums.insert(3);
    nums.insert(5); // 重复元素,不会被插入
    nums.insert(1);

    for (int n : nums) {
        cout << n << " ";
    }
    // 输出:1 3 5
    return 0;
}

自定义类型去重需重载比较规则

如果set中存放的是自定义结构体或类,默认无法判断是否重复,必须提供比较方式。通常通过重载<运算符或传入比较函数对象来实现。

MiniMax Word
MiniMax Word

MiniMax Word专业文档生成 - 基于.NET OpenXML SDK,完整保留页眉页脚目录、修订痕迹、复杂表格样式,输出可直接交付的.docx文档。

下载
示例:结构体重载小于运算符
struct Person {
    string name;
    int age;
    bool operator<(const Person& p) const {
        return age < p.age; // 按年龄去重(相同年龄视为重复)
    }
};

此时插入相同年龄的Person对象,只会保留一个。

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

查找元素是否存在

set提供了高效的查找方法,时间复杂度为O(log n)。常用方式有两种:

  • find():返回指向元素的迭代器,若未找到则返回end()
  • count():对set而言,结果只能是0或1,可用于判断是否存在
查找示例:
set<string> words = {"hello", "world", "cpp"};

if (words.find("hello") != words.end()) {
    cout << "找到了!\n";
}

if (words.count("world")) {
    cout << "world存在\n";
}
基本上就这些。只要理解set的有序性和唯一性特性,就能自然掌握其去重机制和查找用法。不复杂但容易忽略细节,比如自定义类型的比较逻辑必须正确定义,否则可能导致去重失效或程序异常。

热门AI工具

更多
蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5824

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2464

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1632

2025.10.17

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

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

2528

2023.11.20

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

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

4074

2025.06.09

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

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

4231

2025.07.04

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

180

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

80

2026.09.23

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

80

2026.09.23

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn