c++中set是什么意思_讲解C++中set容器的功能与使用示例

13次阅读

set是c++ STL中基于红黑树实现的关联容器,1. 元素唯一且自动升序排列;2. 插入、删除、查找时间复杂度为O(log n);3. 不支持下标访问,需用迭代器遍历;4. 键即值,不可直接修改元素,需先删后插;5. 可自定义排序如降序;适用于去重、有序存储及集合运算。

c++中set是什么意思_讲解C++中set容器的功能与使用示例

set 是 C++ 标准模板库(STL)中的一种关联式容器,用于存储唯一且自动排序的元素。它基于红黑树(一种自平衡二叉搜索树)实现,因此插入、删除和查找操作的时间复杂度为 O(log n),效率较高。

set 的主要特点

理解 set 的核心特性有助于正确使用它:

  • 元素唯一性:set 中不允许有重复值,插入相同值时,多余的会被忽略。
  • 自动排序:元素在插入时会按照升序(默认)自动排列
  • 不可通过下标访问:不能像数组那样用 index 访问元素,需使用迭代器遍历。
  • 键即值:set 中每个元素既是键也是值,没有额外的数据域(与 map 不同)。

常用操作与示例代码

以下是 set 常见操作的使用方法,配合简单示例说明:

#include  #include   int main() {     std::set numbers;      // 插入元素     numbers.insert(5);     numbers.insert(1);     numbers.insert(9);     numbers.insert(1); // 重复元素,不会被插入      // 遍历输出(自动升序)     for (const auto& num : numbers) {         std::cout << num << " ";     }     // 输出:1 5 9      std::cout << "n大小:" << numbers.size();      // 查找元素     if (numbers.find(5) != numbers.end()) {         std::cout << "n找到元素 5";     }      // 删除元素     numbers.erase(1);      // 再次遍历     std::cout << "n删除后:";     for (const auto& num : numbers) {         std::cout << num << " ";     }     // 输出:5 9      return 0; }

自定义排序规则

默认情况下,set 按升序排列。如果需要降序或其他比较逻辑,可以传入自定义比较函数或仿函数:

立即学习C++免费学习笔记(深入)”;

// 降序排列 std::set> descSet; descSet.insert(3); descSet.insert(1); descSet.insert(8);  for (const auto& n : descSet) {     std::cout << n << " "; } // 输出:8 3 1

适用场景建议

set 特别适合以下情况:

  • 需要去重并保持有序的数据集合。
  • 频繁进行查找、插入、删除操作,且要求较高效率。
  • 处理数学集合运算,如并集、交集(可结合算法头文件中的 set_union、set_intersection 使用)。

基本上就这些。掌握 set 能帮助你更高效地管理有序唯一数据,是 C++ 编程中非常实用的工具之一。注意它不支持修改已有元素(因为会影响排序),如需更新应先删除再插入。

text=ZqhQzanResources