首页 > 后端开发 > C++ > 正文

c++中set容器的用法详解_c++ set集合的常见操作与应用场景

穿越時空
发布: 2025-10-21 13:17:01
原创
952人浏览过
set是C++ STL中基于红黑树实现的关联容器,自动排序且元素唯一,支持O(log n)的插入、删除和查找操作。通过#include <set>引入,定义为std::set<T>,可使用初始化列表或迭代器构造。常用方法包括insert、erase、find、count等,适用于去重、有序遍历和快速查找场景。默认按升序排列,可通过自定义比较函数或重载<运算符调整排序规则,广泛用于集合维护与统计任务。

c++中set容器的用法详解_c++ set集合的常见操作与应用场景

在C++中,set 是标准模板库(STL)中一个非常实用的关联容器,用于存储唯一且自动排序的元素。它底层通常基于红黑树实现,保证了插入、删除和查找操作的时间复杂度为 O(log n)。由于其特性,set 在去重、有序遍历、快速查找等场景中被广泛使用。

set的基本定义与初始化

要使用 set,需要包含头文件 <set>

#include <set>

定义一个 set 的基本语法如下:

std::set<T> s;

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

其中 T 是元素类型,可以是 int、double、string 等可比较的类型。

常见初始化方式包括:

  • 空集合:std::set<int> nums;
  • 用初始化列表:std::set<int> nums = {5, 2, 8, 2};(重复的2会被自动去除)
  • 从其他容器构造:std::set<int> nums(vec.begin(), vec.end());

常用操作方法详解

set 提供了一系列成员函数来完成增删查改等操作:

AppMall应用商店
AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

AppMall应用商店 56
查看详情 AppMall应用商店
  • insert(x):插入元素 x。若已存在则不插入,返回一个 pair,second 表示是否插入成功。
  • erase(x):删除值为 x 的元素;也可传入迭代器删除指定位置元素。
  • find(x):查找元素 x,返回指向该元素的迭代器,未找到返回 end()。
  • count(x):判断元素是否存在,存在返回1,否则返回0(因元素唯一,结果只能是0或1)。
  • size():返回当前元素个数。
  • empty():判断集合是否为空。
  • clear():清空所有元素。
  • begin() / end():返回首尾迭代器,可用于遍历。

示例代码:

std::set<int> s;
s.insert(3);
s.insert(1);
s.insert(3); // 重复,不会插入
if (s.find(1) != s.end()) {
    std::cout << "Found 1\n";
}
for (const auto& x : s) {
    std::cout << x << " "; // 输出:1 3
}

自动排序与自定义比较规则

set 中的元素默认按升序排列(使用 std::less<T>)。如果希望改变排序方式,比如降序,可以在定义时指定比较函数:

std::set<int, std::greater<int>> desc_set;

也可以使用自定义结构体或类,但必须提供可比较的规则:

struct Person {
    std::string name;
    int age;
    bool operator<(const Person& p) const {
        return age < p.age; // 按年龄排序
    }
};
std::set<Person> people;

注意:自定义类型必须重载 < 运算符,或传入仿函数作为模板参数。

应用场景举例

set 的典型用途包括:

  • 去重处理:当需要读入一组数据并去除重复值时,直接插入 set 即可。
  • 有序集合维护:如排行榜、任务优先级队列(简单场景)等,要求元素有序且不重复。
  • 查找优化:比 vector 更快地判断某个值是否存在。
  • 集合运算:结合算法库中的 set_union、set_intersection 等函数进行数学集合操作。

例如统计一段文本中出现过的单词(不重复):

std::set<std::string> words;
std::string word;
while (std::cin >> word) {
    words.insert(word);
}
std::cout << "Unique words: " << words.size() << "\n";

基本上就这些。set 使用简单高效,适合大多数需要自动排序和唯一性的场景。掌握它的基本操作和限制(如不能修改元素值),能显著提升编码效率。

以上就是c++++中set容器的用法详解_c++ set集合的常见操作与应用场景的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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