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

C++之unordered_set容器的使用

unordered_set 是 C++ STL (Standard Template Library) 中的一种无序关联容器,用于存储唯一的元素。与 set 不同,unordered_set 不对元素进行排序,而是通过哈希表(hash table)来存储元素。这意味着 unordered_set 的查找、插入和删除操作的平均时间复杂度为 O(1),但在最坏情况下可能达到 O(n)。

主要特点

  1. 唯一性unordered_set 容器不允许有重复的元素。
  2. 无序:元素的存储顺序是不确定的,不保证任何特定的顺序。
  3. 高效操作:查找、插入和删除操作的平均时间复杂度为 O(1)。
  4. 哈希表实现:内部使用哈希表来存储元素。

常用操作

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

自定义哈希函数和相等函数

如果你存储的元素类型不是内置类型,或者你希望使用不同的哈希函数和相等函数,可以自定义它们。例如,假设你有一个自定义的结构体:

#include <unordered_set>
#include <string>struct Person {std::string name;int age;bool operator==(const Person& other) const {return name == other.name && age == other.age;}
};struct PersonHash {std::size_t operator()(const Person& p) const {std::hash<std::string> stringHash;std::hash<int> intHash;return stringHash(p.name) ^ intHash(p.age);}
};struct PersonEqual {bool operator()(const Person& p1, const Person& p2) const {return p1 == p2;}
};int main() {std::unordered_set<Person, PersonHash, PersonEqual> people;people.insert({"Alice", 30});people.insert({"Bob", 25});for (const auto& person : people) {std::cout << person.name << ", " << person.age << std::endl;}return 0;
}

总结

unordered_set 是一个非常有用的数据结构,当你需要存储唯一且不需要排序的元素时,它是一个很好的选择。由于它的内部实现,unordered_set 提供了高效的插入、删除和查找操作。与 set 相比,unordered_set 在查找速度上通常更快,但不保证元素的顺序。


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

相关文章:

  • ip定位是什么,如何改变IP定位到其它城市
  • WordPress网站添加嵌入B站视频,自适应屏幕大小,取消自动播放
  • 【C++笔记】string类的模拟实现
  • 掌握 PyQt5:从零开始的桌面应用开发
  • 详解Rust标准库:VecDeque 队列
  • Java如何实现企业微信审批流程
  • 罗德里格斯公式-计算一个点绕着任意直线旋转一定角度后的新位置
  • Java15
  • Easyconnect官网下载安装使用教程
  • Windows命令行常用快捷指令
  • UE5.4 PCG 自定义PCG蓝图节点
  • 函数式编程
  • 数据结构------栈(Java语言描述)
  • 前向-后向卡尔曼滤波器(Forward-Backward Kalman Filter)资料汇总
  • [CARLA系列--02]CARLA 0.9.15 在Windows下的安装教程(二)
  • 国药准字生发产品有哪些?这几款不错
  • CC协议解读
  • <网络> 协议
  • 【vue2.7.16系列】手把手教你搭建后台系统__登录接口返回信息调整(16)
  • JDBC上课总结(1)(JDBC核心API、JDBC基本编码步骤)(JDBC底层由来、使用)
  • laravel chunkById 分块查询 使用时的问题
  • ES集群搭建(仅供自己参考)
  • 恢复rm -rf删除的数据
  • 源代码泄漏怎么办?SDC沙盒成为破局利器
  • UVM的callback机制
  • 网络规划设计师-(11)网络层