C++ STL set 容器详解
set 是 C++ STL 中常用的关联容器,底层基于红黑树实现。它存储的元素有序且唯一,非常适合需要去重和排序的场景。理解其特性有助于在算法题和工程实践中做出更优的数据结构选择。
核心特性
- 有序性:元素按特定规则(默认升序)自动排序。
- 唯一性:每个 value 必须唯一,重复插入会被忽略。
- 不可变性:容器内元素为 const,修改需先删除再插入。
- 底层结构:红黑树(一种自平衡二叉搜索树),保证了查找、插入、删除的时间复杂度均为 O(log n)。
容量查询
empty() 与 size()
判断容器是否为空或获取元素个数是最基础的操作。
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> se;
cout << "Is empty: " << se.empty() << endl; // true
se.insert(1);
cout << "Size: " << se.size() << endl; // 1
cout << "Is empty: " << se.empty() << endl; // false
return 0;
}
注意 size() 返回的是 size_type 类型,通常直接用于循环条件或比较。
增删操作 (Modifiers)
insert()
set 的插入支持多种重载形式,灵活应对不同场景。
- 单元素插入:返回 pair<iterator, bool>,bool 表示是否插入成功。
- 带提示插入:提供 hint 迭代器可优化性能,但需保证位置正确。
- 区间插入:支持从其他容器批量拷贝数据。
#include <iostream>
std;
{
set<> myset;
( i = ; i <= ; ++i) myset.(i * );
ret = myset.();
(!ret.second) {
cout << << *ret.first << endl;
}
myset.(ret.first, );
arr[] = {, , };
myset.(arr, arr + );
cout << ;
( it = myset.(); it != myset.(); ++it) {
cout << << *it;
}
cout << endl;
;
}


