c++集合(set)的介绍

在C++中,集合(set)是一种容器,它存储唯一的元素,而且这些元素按照某种排序规则自动排序。C++标准库提供了两种主要的集合类型:std::setstd::unordered_set。这两种集合都提供了一组方法来插入、删除、查找元素,并且它们的性能特点略有不同。

  1. std::set
    • std::set 是基于红黑树实现的有序集合。它的元素按照排序规则自动排序,并且不允许重复元素。
    • 插入、删除、查找操作的时间复杂度都是 O(log n),其中 n 是集合中元素的数量。
    • std::set 的元素是不可变的,一旦插入到集合中就不能修改。
    • 需要包含头文件 <set>
cpp 复制代码
#include <iostream>
#include <set>

int main() {
    std::set<int> mySet;

    // 插入元素
    mySet.insert(10);
    mySet.insert(5);
    mySet.insert(15);
    mySet.insert(5); // 不会被插入,因为集合中已经存在相同的元素

    // 遍历集合
    for (int num : mySet) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 删除元素
    mySet.erase(10);

    // 查找元素
    if (mySet.find(5) != mySet.end()) {
        std::cout << "5 存在于集合中" << std::endl;
    } else {
        std::cout << "5 不存在于集合中" << std::endl;
    }

    return 0;
}
  1. std::unordered_set
    • std::unordered_set 是基于哈希表实现的无序集合。它的元素没有特定的顺序,并且不允许重复元素。
    • 插入、删除、查找操作的平均时间复杂度是 O(1),但在最坏情况下可能会是 O(n),其中 n 是集合中元素的数量。
    • std::unordered_set 的元素是不可变的,一旦插入到集合中就不能修改。
    • 需要包含头文件 <unordered_set>
cpp 复制代码
#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> myUnorderedSet;

    // 插入元素
    myUnorderedSet.insert(10);
    myUnorderedSet.insert(5);
    myUnorderedSet.insert(15);
    myUnorderedSet.insert(5); // 不会被插入,因为集合中已经存在相同的元素

    // 遍历集合
    for (int num : myUnorderedSet) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 删除元素
    myUnorderedSet.erase(10);

    // 查找元素
    if (myUnorderedSet.find(5) != myUnorderedSet.end()) {
        std::cout << "5 存在于集合中" << std::endl;
    } else {
        std::cout << "5 不存在于集合中" << std::endl;
    }

    return 0;
}

这就是C++中集合的简要介绍。根据你的需求和性能要求,你可以选择使用有序集合 std::set 或无序集合 std::unordered_set

相关推荐
2501_941875283 小时前
从配置中心到动态管理的互联网工程语法演进与多语言实践分享
开发语言·python
hfywmsj3 小时前
广州餐饮铺位招租决策模型:多因子选址系统设计
开发语言·人工智能·python·广州餐饮铺位招租
努力的lpp5 小时前
php反序列化一(大白话版)
开发语言·web安全·php·ctf·反序列化
菜鸟~noob2335 小时前
【电子战】第03篇:CFAR(恒虚警)处理【含matlab代码】
开发语言·matlab
泡海椒6 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb6 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
Keven_117 小时前
算法札记:ACM适用的很骚的C++语法(持续更新)
开发语言·c++
mengzhi啊7 小时前
QPluginLoader 动态 DLL 插件版,支持插件之间通信,广播。请求和应答
c++·qt
脉动数据行情18 小时前
C# 实现德指 DAX 期货 WebSocket 实时行情监听
开发语言·websocket·c#
大圣编蚕8 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法