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

C++之SET容器

set 是 C++ STL (Standard Template Library) 中的一个关联容器。它存储唯一的元素,并且这些元素是自动排序的(默认情况下为升序)。set 内部通常实现为红黑树,这是一种自平衡二叉搜索树。

主要特点

  1. 唯一性set 容器不允许有重复的元素。
  2. 排序:所有元素都是按照一定的顺序排列的,默认为升序。
  3. 高效查找:由于内部使用了平衡二叉搜索树,所以插入、删除和查找操作的时间复杂度都为 O(log n)。
  4. 双向迭代器:可以使用双向迭代器来遍历 set 容器中的元素。

常用操作

定义和初始化
#include <set>std::set<int> s; // 创建一个空的 set 容器
std::set<int> s = {1, 2, 3}; // 初始化 set 容器
插入元素
s.insert(5); // 插入单个元素
s.insert({6, 7}); // 插入多个元素
删除元素
s.erase(5); // 删除值为 5 的元素
s.erase(s.begin()); // 删除第一个元素
查找元素
auto it = s.find(3); // 查找值为 3 的元素,返回指向该元素的迭代器,如果找不到则返回 end()
if (it != s.end()) {std::cout << "Found " << *it << std::endl;
} else {std::cout << "Not found" << std::endl;
}
检查元素是否存在
if (s.count(3)) {std::cout << "3 is in the set." << std::endl;
} else {std::cout << "3 is not in the set." << std::endl;
}
获取元素数量
std::cout << "The set has " << s.size() << " elements." << std::endl;
清空集合
s.clear(); // 清空 set 容器
遍历集合
for (const auto& elem : s) {std::cout << elem << " ";
}
// 或者使用迭代器
for (auto it = s.begin(); it != s.end(); ++it) {std::cout << *it << " ";
}

自定义比较函数

如果你想改变 set 中元素的排序方式,可以提供一个自定义的比较函数或对象。例如,如果你想要创建一个降序的 set,你可以这样做:

#include <set>
#include <functional>std::set<int, std::greater<int>> descendingSet; // 创建一个降序的 set

或者使用自定义的比较类:

struct CustomCompare {bool operator()(int a, int b) const {return a > b; // 降序排序}
};std::set<int, CustomCompare> customSet;

总结

set 是一个非常有用的数据结构,当你需要存储唯一且有序的元素时,它是一个很好的选择。由于它的内部实现,它提供了高效的插入、删除和查找操作。


http://www.mrgr.cn/news/67790.html

相关文章:

  • 驱动-----中断底半部
  • aspose如何获取PPT放映页“切换”的“持续时间”值
  • 如何用ChatGPT结合Python处理遥感数据
  • 【Spring】Spring Web MVC基础入门~(含大量例子)
  • 在 Mac 和 Windows 系统中快速部署 OceanBase
  • Android 延时操作的常用方法
  • 大规模地图构建的细粒度高分辨率卫星数据集OpenSatMap(3787张高分辨率卫星图像)0.15-0.3m
  • 线上3D展厅能实现哪些交互效果?
  • vue2 pdf 链接地址打开
  • 数据结构——双链表
  • 双11疯狂凑单:累坏买家,坑惨卖家
  • 基于TRIZ的教育机器人功能创新
  • 动漫风格大模型和lora推荐
  • 基于 ESP AT 固件使用 BLE 静态配对码完成安全连接和通信
  • 《清宫辞Ⅱ》开机:陈欣予旗装惊艳回归 重新演绎宫闱传奇
  • 树状数组浅谈
  • 论文阅读:基于语义分割的非结构化田间道路场景识别
  • 100种算法【Python版】第55篇——Delaunay三角剖分之Bowyer-Watson算法
  • SSH实验3拒绝root用户远程登录
  • 2024.11.6:艾灸
  • hdmi介绍及DRM实现
  • 《现代网络技术》读书笔记:需求和技术
  • 年入百万:从初中辍学到 50 万读者!
  • audacity 保存中文文件保存报错问题解决
  • C++ OpenCV 理想滤波
  • opencv各个模块的概念说明