set 类实现
set 的模板声明中,T 代表键值类型。默认要求支持比较操作,若需自定义排序规则可传入仿函数作为第二个模板参数。内存分配方面,底层从空间配置器申请,也可自行实现内存池。
set 基于红黑树实现,增删查时间复杂度为 O(logN)。迭代器遍历时走中序遍历,因此数据天然有序(升序)。
set 构造与迭代器
插入结构体或数字时,set 会自动执行排序和去重操作。
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> s;
// set<int, greater<int>> s; // 降序排列
s.insert(4);
s.insert(3);
s.insert(8);
s.insert(9);
s.insert(2);
s.insert(6);
auto it = s.begin();
while (it != s.end()) {
cout << *it << " ";
++it;
}
cout << endl; // 输出:2 3 4 6 8 9
return 0;
}
注意:set 不支持修改元素值,一旦修改会破坏红黑树结构,编译会报错。
支持 initializer_list 初始化,重复插入会被忽略。
s.insert({2, 3, 4, 5});
for (auto e : s) {
cout << e << " ";
}


