C++容器——unordered_set浅谈

实现原理 

unordered_set 在 C++ 标准库中是基于哈希表(Hash Table)的数据结构实现的。哈希表是一种通过散列函数将键(在这里是 unordered_set 中的元素)映射到一个固定大小数组的不同桶(buckets)中的数据结构。每个桶可以包含多个元素,当两个或更多的元素散列到同一个桶时,通常使用链表或其他冲突解决策略来存储这些元素。在查找、插入和删除操作时,首先计算元素的哈希值,然后直接定位到对应的桶进行操作。

常用操作

  • 插入:通过 insert 函数添加元素,如果元素已存在,则不执行插入操作。
std::unordered_set<int> mySet;
mySet.insert(10);
mySet.insert({20, 30});
  • 查找:使用 find 函数确定元素是否存在,返回指向元素的迭代器或 end() 表示未找到。
if (mySet.find(20) != mySet.end()) {// 元素20存在于集合中
}
  • 删除erase 函数用于移除指定元素或者范围内的元素。
mySet.erase(10);
auto it = mySet.find(20);
if (it != mySet.end()) {mySet.erase(it);
}
  • 判断空集:使用 empty() 函数检查容器是否为空。
if (mySet.empty()) {// 集合为空
}
  • 大小获取:调用 size() 获取容器中元素的数量。
  • 清除所有元素clear() 函数用来清空整个容器。

特性及应用场景

  • 特性:

    • 无序:元素在容器中的顺序与插入顺序无关,且每次遍历可能得到不同的顺序。
    • 唯一性:保证集合内没有重复元素,对于尝试插入的重复值,不会实际增加新元素。
    • 高效性:平均情况下,插入、删除和查找操作的时间复杂度为 O(1),取决于哈希函数的质量以及负载因子。
  • 应用场景:

    • 当需要快速查询某个元素是否存在时,例如字词过滤、去重处理等。
    • 实现“集合”概念的应用,如数学上的集合运算(并集、交集、差集)。
    • 快速查找大量数据中唯一的成员资格验证。

相关容器及其区别

  • set:同样是标准库中的关联容器,但它是有序的,内部采用红黑树实现。因此,set 中的元素始终按照某种排序规则排列,而 unordered_set 不保证任何排序。由于有序性的维护,set 的插入、删除和查找操作在最坏情况下的时间复杂度都是 O(log n),但在有序遍历方面更高效。
  • unordered_multiset 和 multiset:这两种容器允许元素重复出现,unordered_multiset 对应于无序版本,而 multiset 是有序版本。

总结来说,unordered_set 是为了提供快速的无序唯一元素集合操作而设计的容器,在不需要维持元素顺序且重视效率的情况下是一个很好的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/740589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS元素显示模式

CSS元素显示模式 定义&#xff1a;元素显示模式是指元素&#xff08;即标签&#xff09;以什么方式进行显示。 HTML元素分为块元素和行内元素 块元素 常见块元素 &#xff08;下列仅举出部分&#xff09; <h1>~<h6>、<p>、<div>、<ul>、<…

【数据分享】2008-2022年全国范围逐月NO2栅格数据(免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000-2022年全国范围逐月的PM2.5栅格数据、2013-2022年全国范围逐月SO2栅格数据、2013-2022年全国范围逐月CO栅格数据和2000-2022年全国范围逐月PM10栅格数据&#xff08;可查看之前的文章获悉详…

Java常用类库与API的使用详解

Java常用类库与API的使用详解 文章目录 Java常用类库与API的使用详解什么是类库与API&#xff1f;一、Java常用类库概览二、常用API的使用场景与示例示例1&#xff1a;使用java.util.Scanner类读取用户输入示例2&#xff1a;使用java.io.FileWriter类写入文件示例3&#xff1a;…

properties文件和yml文件的区别以及文件优先级

properties文件和yml文件的区别 yml是按照缩进关系&#xff0c;而properties用"."来表示关系springboot默认生成的是properties文件当properties文件和yml文件都存在时&#xff0c;properties文件的优先级更高。 properties文件的样式 yml文件的样式 文件优先级 r…

Shell常用脚本:hadoop集群启动、停止、重启脚本

脚本内容以我搭建的hadoop集群为例&#xff0c;你们自用的时候自行根据你们的情况进行修改即可 hadoop-cluster-manager.sh #!/bin/bash # 1. 调用此脚本前&#xff0c;请使用ssh-keygen -t rsa、ssh-copy-id -f 目标机器这两个命令使得目标机器是免密登录的 # 2. ssh远程执行…

AgentScope Learning Feedback

教程&#xff1a;关于AgentScope — AgentScope 文档 (modelscope.github.io) AgentScope代码结构 AgentScope ├── src │ ├── agentscope │ | ├── agents # 与智能体相关的核心组件和实现。 │ | ├── memory # 智能体记忆…

第五篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas在教育数据和研究数据处理领域的应用

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas 在教育和学术研究中的常见应用介绍二、数据清洗和预处理示例代码三、数据分析和统计示例代码四、数据可视化示例代码五、时间序列分析示例代码六、数据导入和导出示例代码七、数…

【C#】典型的 C# 项目使用 Visual Studio 编译所产生的文件格式和文件夹

一个典型的 C# 项目使用 Visual Studio 编译,通常包括以下格式的文件和文件夹: .sln 文件: Solution File 中文全称:解决方案文件 扩展名: .sln格式: 文本文件功能: 解决方案文件,包含项目的整体结构和配置信息。产生原因: 当创建一个新的解决方案或向解决方案中添加项目时,Vis…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的障碍物检测系统(深度学习代码+UI界面+训练数据集)

摘要&#xff1a;开发障碍物检测系统对于道路安全性具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个障碍物检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型间的性能…

JavaParser的快速介绍

开发的工作主要是写代码&#xff0c; 有考虑过使用代码写代码&#xff0c; 使用代码分析和改进代码吗&#xff1f; JavaParser 就可以帮你用来处理Java 代码的这些功能。 Java Parser 的介绍 Java Parser是一个用于解析和分析Java源代码的开源工具。它提供了一个API接口&…

Tomcat Nginx的动静分离

1.单机反向代理&#xff1a; 实验&#xff1a;7-3 做客户机&#xff0c;7-2做代理服务器&#xff0c;7-1 tomcat 服务器 数据传输从7-3到7-2到7-1 配置&#xff1a; 7-1为之前的虚拟机配置 7-2做代理服务器配置&#xff1a; 7-3客户机配置&#xff1a; 测试&#xff1a; 2…

【论文题目】数据分析-精选论文选题指南

&#x1f4ca; 数据分析练手项目大集合 &#x1f9e0; 在当今信息时代&#xff0c;数据分析已成为推动科学发现、商业决策和技术创新的关键力量。对于学者和研究者而言&#xff0c;选择一个具有前瞻性、创新性和实用性的数据分析论文选题&#xff0c;不仅能够深化对数据科学的理…

3.自定义工程目录配置CMakeLists

问题背景 熟悉stm32keil开发的都知道&#xff0c;我们在编写不同的外设时&#xff0c;通常都会单独编写一个app文件夹或者是user文件夹之类的来存放不同外设功能的源文件和头文件。 在前面一节2.构建第一个工程并烧录到ESP32开发板-CSDN博客中&#xff0c;我们是使用了一个乐鑫…

elementui el-table表格自动循环滚动【超详细图解】

效果如图 1. 当表格内容超出时&#xff0c;自动滚动&#xff0c;滚动到最后一条之后在从头滚动。 2. 鼠标移入表格中&#xff0c;停止滚动&#xff1b;移出后&#xff0c;继续滚动。 直接贴代码 <template><div><div class"app-container"><e…

AI智能分析网关V4将HTTP消息推送至安防监控视频汇聚EasyCVR平台的操作步骤

TSINGSEE青犀视频智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常…

JavaScript:查找两个正序数组的中位数

中位数&#xff1a;统计学中的专有名词&#xff0c;代表一个样本、种群或概率分布中的一个数值&#xff0c;其可将数值集合划分为相等的上下两部分。对于有限的数集&#xff0c;可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个&#xff0c;通常…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的输电线路设备检测系统(深度学习+UI界面+Python代码+训练数据集)

摘要&#xff1a;本篇博客详细介绍了如何运用深度学习构建一个先进的输电线路设备检测系统&#xff0c;并附上了完整的实现代码。该系统利用了最新的YOLOv8算法作为其核心&#xff0c;同时也对之前版本的YOLOv7、YOLOv6、YOLOv5进行了性能比较&#xff0c;包括但不限于mAP&…

Pytorch搭建AlexNet 预测实现

1.导包 import torch import matplotlib.pyplot as plt import json from model import AlexNet from PIL import Image from torchvision import transforms 2.数据预处理 data_transform transforms.Compose([transforms.Resize((224, 224)), # 将图片重新裁剪transform…

<线性回归算法(Linear regression)>——《机器学习算法初识》

目录 一、线性回归简介 1 线性回归应用场景 2 什么是线性回归 2.1 定义与公式 2.2 线性回归的特征与目标的关系分析 3 小结 二、线性回归的损失和优化 1 损失函数 2 优化算法 2.1 正规方程 2.1.1 什么是正规方程 2.1.2 正规方程求解举例 2.1.3 正规方程的推导 2.…

学习python笔记:3,条件判断,while循环,for循环,嵌套循环

注意&#xff1a; condition后面有冒号&#xff1a; 换行之后的代码要对齐。 条件判断 if 在Python中&#xff0c;if 语句用于基于某个条件&#xff08;或一系列条件&#xff09;来执行代码块。如果条件为真&#xff08;True&#xff09;&#xff0c;则执行 if 语句下的代码…