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

c++ unordered_set的用法

std::unordered_set 是 C++ STL(标准模板库)中提供的一个容器,用于存储不重复的元素,且不保持任何特定的顺序。它基于哈希表实现,通常具有较快的插入、查找和删除操作(平均时间复杂度为 O(1))。

主要特性

  1. 唯一性:所有元素都是唯一的,不能重复。
  2. 无序:元素的存储顺序是不可预测的。
  3. 效率:具有平均 O(1) 的时间复杂度用于查找、插入和删除操作。

头文件

使用 std::unordered_set 需要包含头文件:

#include <unordered_set>

基本操作

以下是 std::unordered_set 的一些基本用法示例,包括如何定义、插入、查找、删除和迭代元素。

1. 定义和初始化
#include <iostream>
#include <unordered_set>

int main() {
    // 定义一个 unordered_set
    std::unordered_set<int> mySet;

    // 使用 initializer list 初始化
    std::unordered_set<int> anotherSet = {1, 2, 3, 4, 5};

    return 0;
}
2. 插入元素
mySet.insert(10);       // 插入单个元素
mySet.insert(20);
mySet.insert(10);       // 尝试插入重复元素,插入失败
3. 查找元素
if (mySet.find(20) != mySet.end()) {
    std::cout << "20 在集合中" << std::endl;
} else {
    std::cout << "20 不在集合中" << std::endl;
}
4. 删除元素
mySet.erase(10); // 删除元素 10
5. 迭代元素

可以使用范围 for 循环或迭代器来遍历集合中的元素:

for (const auto& element : mySet) {
    std::cout << element << " ";
}
std::cout << std::endl;

// 使用迭代器
for (auto it = mySet.begin(); it != mySet.end(); ++it) {
    std::cout << *it << " ";
}
std::cout << std::endl;
6. 检查大小和清空
std::cout << "集合大小: " << mySet.size() << std::endl; // 获取集合大小
mySet.clear(); // 清空集合

完整示例

下面是一个完整的示例,展示了如何使用 std::unordered_set 进行基本操作:

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> mySet = {1, 2, 3, 4, 5};

    // 插入元素
    mySet.insert(6);
    mySet.insert(3); // 重复插入无效

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

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

    // 迭代输出集合元素
    std::cout << "集合元素: ";
    for (const auto& element : mySet) {
        std::cout << element << " ";
    }
    std::cout << std::endl;

    // 获取集合大小
    std::cout << "集合大小: " << mySet.size() << std::endl;

    // 清空集合
    mySet.clear();
    std::cout << "清空后集合大小: " << mySet.size() << std::endl;

    return 0;
}

总结

  • std::unordered_set 是一个非常有用的容器,适合需要快速查找和唯一性保证的场合。
  • 它的插入、查找和删除操作在平均情况下都能提供 O(1) 的时间复杂度。
  • 由于没有顺序,因此元素的排列是不可预测的,适合那些不关心元素顺序的应用场景。

相关文章:

  • 登录-异步请求用户数据无法保存-bug
  • Django+Vue宠物服务管理系统的设计与实现
  • Vue(十) 过渡动画、配置代理服务器,解决请求跨域的问题
  • 项目策划书六度自由双足机器人
  • JetBrains`s IntelliJ IDEA springboot项目 gradle-bin安装 国内加速
  • 常用企业技术架构开发速查工具列表
  • arcgisjs4.0 内网部署字体不显示问题处理
  • DataSet和DataTable的关系
  • 绝对定位导致内容自动换行问题解决
  • 线性代数教材书籍推荐
  • SprinBoot+Vue问卷调查微信小程序的设计与实现
  • Golang | Leetcode Golang题解之第387题字符串中的第一个唯一字符
  • 时序预测 | 基于VMD-SSA-LSSVM+LSTM多变量时间序列预测模型(Matlab)
  • Vue(十一)默认插槽、具名插槽、作用域插槽
  • 【ORACLE】listagg() 函数
  • 第4章 汇编语言和汇编软件
  • JAVA vs Python:谁更适合后端开发?
  • 使用C++编写接口调用PyTorch模型,并生成DLL供.NET使用
  • UFUG2601-OJ 2048 Game
  • SpringMVC 第一次复学笔记
  • 昆明破获一起算命破灾诈骗案,民警:大师算不到自己的未来
  • 国家发改委下达今年第二批810亿超长期特别国债资金,支持消费品以旧换新
  • 我国将开展市场准入壁垒清理整治行动
  • 河北:开展领导干部任性用权等形式主义官僚主义问题专项整治
  • 上海出台灵活就业人员公积金新政:不限户籍、提取自由,6月起施行
  • 中国黄金协会:一季度我国黄金产量同比增1.49%,黄金消费量同比降5.96%