您的位置: 首页> C++教程> 【C++】C++中的 set

【C++】C++中的 set

时间:2025-09-05 14:00:02 来源:互联网

C++中的 set

在 C++ 里,你可能经常要判断一个元素是否存在,或者需要一个“不重复”的集合。
这时候,std::set 就能起到这个作用。

很多人一开始会把它当成一个“去重的容器”,但 set 的设计比这复杂得多。今天我们就从原理、用法、性能和场景四个角度把它讲清楚。


1. set 是啥?

std::set 是 C++ STL 中的关联容器,存储一组 唯一的元素,并且自动排序。
它有几个核心特点:

你可以把它看作是一个性能较为稳定的“有序、不重复的数组”。


2. 底层实现:红黑树

map 类似,set 的底层通常是 红黑树(一种平衡二叉搜索树)。

这就解释了:

如果想要“无序集合”,C++ 还提供了 unordered_set(哈希表实现)。


3. 基本用法

举个例子:

#include <iostream>
#include <set>
using namespace std;

int main() {
    set<int> s;

    s.insert(3);
    s.insert(1);
    s.insert(2);
    s.insert(3); // 重复元素不会插入

    for (int x : s) {
        cout << x << " "; // 1 2 3
    }

    if (s.find(2) != s.end()) {
        cout << "n2 存在于集合中n";
    }

    s.erase(1); // 删除元素
}

常用操作:


4. 常见应用场景

  1. 去重集合
    比如统计一篇文章里出现过的所有单词,set 就能保证唯一性和排序。
  2. 有序查找
    比如需要快速找到“≥X 的最小值”,可以用 lower_bound
  3. 动态维护有序序列
    插入 / 删除元素的同时,还能保持整体有序,适合需要频繁更新的数据流。

5. 性能与替代方案


6. 小结

如果你理解了 mapset 就相当于只存“键”的版本。

上一篇:大名鼎鼎的红黑树,究竟是何方神圣? 下一篇:[C语言]第二章-从Hello World到头文件

相关文章

相关应用

最近更新