当前位置: 首页 > news >正文

C++ SLT之 set

1. 核心特性

• 唯一性:元素自动去重,不允许重复值。

• 有序性:元素默认按升序排列(可通过自定义比较器改变顺序)。

• 不可修改:元素值不可直接修改(可能破坏排序),需先删除再插入新值。

• 关联容器:通过键(即元素本身)访问,支持高效查询(对数时间复杂度)。

2. 底层实现

通常基于红黑树(平衡二叉搜索树)实现,保证插入、删除、查找的时间复杂度均为 O(log n)。

3. 基本操作示例

#include <iostream>
#include <set>
using namespace std;int main() {// 声明setset<int> mySet;// 插入元素mySet.insert(3);mySet.insert(1);mySet.insert(4);mySet.insert(1);  // 重复元素不会被插入// 遍历输出(自动排序)for (int num : mySet) {cout << num << " ";  // 输出:1 3 4}cout << endl;// 查找元素auto it = mySet.find(3);if (it != mySet.end()) {cout << "Found: " << *it << endl;}// 删除元素mySet.erase(3);  // 删除值为3的元素// 其他常用操作cout << "Size: " << mySet.size() << endl;     // 元素个数cout << "Empty: " << mySet.empty() << endl;   // 是否为空mySet.clear();                                // 清空setreturn 0;
}

4. 自定义排序规则

set 的完整模板声明是:

template <class Key, class Compare = less<Key>, class Allocator = allocator<Key>>
class set;

其中:
• 第一个参数 Key:元素的类型(这里是 int)

• 第二个参数 Compare:比较函数的类型(这里是 DescendingCompare)

#include <iostream>
#include <set>
using namespace std;// 自定义降序比较器
struct DescendingCompare {bool operator()(int a, int b) const {return a > b;  // 降序:a > b 时 a 排在前面}
};int main() {set<int, DescendingCompare> descSet;descSet.insert({5, 2, 8, 1, 9});for (int num : descSet) {cout << num << " ";  // 输出:9 8 5 2 1}cout << endl;return 0;
}

5. 常用成员函数

insert(value) 插入元素

erase(value) 删除指定元素

find(value) 查找元素,返回迭代器

count(value) 返回元素个数(0或1)

lower_bound() 返回第一个不小于值的迭代器

upper_bound() 返回第一个大于值的迭代器

begin()/end() 返回首尾迭代器

6. 相关容器

• multiset:允许重复元素的有序集合。

• unordered_set:基于哈希表的无序集合(查询更快,但无序)。

7. 注意事项

• 插入/删除操作不会使迭代器失效(被删除元素的迭代器除外)。

• 元素类型需支持比较(或提供自定义比较器)。

• 相比 vector/array,set 更适用于需要频繁查找和去重的场景。

http://www.dtcms.com/a/591117.html

相关文章:

  • 北京制作网站公司哪家好wordpress win7
  • 网站建设经费申请ppt模板免费下载完整版免费无需会员
  • 怎么看自己做没做网站地图2023年营业执照年检申报
  • 如何注册网站免费的可以免费注册网站
  • wap网站 html5html 公司网站 代码下载
  • 网页设计网站的分析西安官网seo哪家公司好
  • 天津网站建设服务wordpress改关键词
  • 赣州商友网络科技有限公司如何做网站推广优化
  • 上海建设集团网站青岛百度推广优化怎么做的
  • 深圳优秀网站建设公司seo优化是什么职位
  • 高端网站建设企业深圳市顺建建设工程有限公司网站
  • 网站被攻击的方法怎么让别人看到自己做的网站
  • 阿里云如何做网站文档怎么做网站链接
  • 正则表达式详解与实战指南:从入门到常见案例
  • 手机可以做3d动漫视频网站遵义网站建设方案
  • ps做网站画布多大深圳 网站建设培训学校
  • 昆山住房与城乡建设局网站网页设计师培训学院
  • 厦门企业网站制作软件外包官网
  • 网站建设服务器的配置wordpress 招商系统
  • 我要建企业营销型网站成都网站建设科技公
  • 睢宁县凌城做网站的外贸人常用网站
  • 淄博网站制作价格低灵犀科技 高端网站建设
  • 外国大气网站建视频网站需要多大空间
  • 做地税电子签章的网站有哪些好的做兼职网站有哪些
  • 网页设计动画网站php做视频网站有哪些软件下载
  • 网站建设的学习网站开发外包业务怎么接
  • 南昌网站建设资讯龙岩seo招聘
  • 穷游 网站开发网站基本功能
  • 买股票的最佳时机解题思路
  • 企业网站推广定义重庆市建设工程信息网官网专家评审