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

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 按升序排列。如果需要降序或其他比较逻辑,可以传入自定义比较函数或仿函数:

神采PromeAI

神采PromeAI

将涂鸦和照片转化为插画,将线稿转化为完整的上色稿。

下载

立即学习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++ 编程中非常实用的工具之一。注意它不支持修改已有元素(因为会影响排序),如需更新应先删除再插入。

https://www.php.cn/faq/1972008.html

发表回复

Your email address will not be published. Required fields are marked *