unordered_set 的常用函数
在 C++ 的标准库中,std::unordered_set 是基于哈希表实现的哈希集合。下面介绍这种语言里哈希集合的常用函数。
C++ std::unordered_set
1. 元素操作
insert- 功能:向哈希集合中插入元素。如果元素已经存在,则不会重复插入。
- 示例代码:
#include <iostream>
#include <unordered_set>int main() {std::unordered_set<int> uset;uset.insert(1);uset.insert(2);for (auto num : uset) {std::cout << num << " ";}return 0;
}
erase- 功能:从哈希集合中移除指定元素。可以通过元素值或者迭代器来指定要移除的元素。
- 示例代码:
#include <iostream>
#include <unordered_set>int main() {std::unordered_set<int> uset = {1, 2, 3};uset.erase(2);for (auto num : uset) {std::cout << num << " ";}return 0;
}
find- 功能:查找指定元素。如果找到,返回指向该元素的迭代器;如果未找到,返回
end()迭代器。 - 示例代码:
- 功能:查找指定元素。如果找到,返回指向该元素的迭代器;如果未找到,返回
#include <iostream>
#include <unordered_set>int main() {std::unordered_set<int> uset = {1, 2, 3};auto it = uset.find(2);if (it != uset.end()) {std::cout << "Found: " << *it << std::endl;} else {std::cout << "Not found" << std::endl;}return 0;
}
count- 功能:统计指定元素在哈希集合中的数量。由于哈希集合中元素唯一,返回值要么是 0(元素不存在),要么是 1(元素存在)。
- 示例代码:
#include <iostream>
#include <unordered_set>int main() {std::unordered_set<int> uset = {1, 2, 3};std::cout << "Count of 2: " << uset.count(2) << std::endl;return 0;
}
2. 容量相关
empty- 功能:检查哈希集合是否为空。如果为空,返回
true;否则返回false。 - 示例代码:
- 功能:检查哈希集合是否为空。如果为空,返回
#include <iostream>
#include <unordered_set>int main() {std::unordered_set<int> uset;std::cout << "Is empty: " << (uset.empty() ? "Yes" : "No") << std::endl;uset.insert(1);std::cout << "Is empty: " << (uset.empty() ? "Yes" : "No") << std::endl;return 0;
}
size- 功能:返回哈希集合中元素的数量。
- 示例代码:
#include <iostream>
#include <unordered_set>int main() {std::unordered_set<int> uset = {1, 2, 3};std::cout << "Size: " << uset.size() << std::endl;return 0;
}
max_size- 功能:返回哈希集合所能容纳的最大元素数量,这取决于系统和库的实现。
- 示例代码:
#include <iostream>
#include <unordered_set>int main() {std::unordered_set<int> uset;std::cout << "Max size: " << uset.max_size() << std::endl;return 0;
}
3. 迭代器相关
begin和end- 功能:
begin()返回指向哈希集合首元素的迭代器,end()返回指向哈希集合尾后位置的迭代器,可用于遍历哈希集合。 - 示例代码:
- 功能:
#include <iostream>
#include <unordered_set>int main() {std::unordered_set<int> uset = {1, 2, 3};for (auto it = uset.begin(); it != uset.end(); ++it) {std::cout << *it << " ";}return 0;
}
cbegin和cend- 功能:与
begin()和end()类似,但返回的是常量迭代器,不能用于修改元素。 - 示例代码:
- 功能:与
#include <iostream>
#include <unordered_set>int main() {const std::unordered_set<int> uset = {1, 2, 3};for (auto it = uset.cbegin(); it != uset.cend(); ++it) {std::cout << *it << " ";}return 0;
}
在 C++ 中,标准库提供了基于哈希表实现的容器 std::unordered_map(存储键值对)和 std::unordered_set(存储单一元素),下面详细介绍它们除了前面提到之外的常见函数和用法。
std::unordered_map
元素操作类
emplace- 功能:原位构造元素并插入到
unordered_map中。与insert不同,emplace可以直接使用构造函数的参数来构造元素,避免了临时对象的创建和拷贝。 - 示例代码:
- 功能:原位构造元素并插入到
#include <iostream>
#include <unordered_map>
#include <string>int main() {std::unordered_map<int, std::string> umap;umap.emplace(1, "one");for (const auto& pair : umap) {std::cout << pair.first << ": " << pair.second << std::endl;}return 0;
}
emplace_hint- 功能:与
emplace类似,但可以提供一个迭代器作为插入位置的提示,帮助提高插入效率。不过,这只是一个提示,插入位置不一定就是该迭代器所指的位置。 - 示例代码:
- 功能:与
#include <iostream>
#include <unordered_map>
#include <string>int main() {std::unordered_map<int, std::string> umap = {{1, "one"}, {2, "two"}};auto hint = umap.begin();umap.emplace_hint(hint, 3, "three");for (const auto& pair : umap) {std::cout << pair.first << ": " << pair.second << std::endl;}return 0;
}
extract- 功能:从
unordered_map中提取一个元素,将其从容器中移除,但保留其资源,可用于后续的插入操作。 - 示例代码:
- 功能:从
#include <iostream>
#include <unordered_map>
#include <string>int main() {std::unordered_map<int, std::string> umap = {{1, "one"}, {2, "two"}};auto node = umap.extract(1);if (node) {node.key() = 3;umap.insert(std::move(node));}for (const auto& pair : umap) {std::cout << pair.first << ": " << pair.second << std::endl;}return 0;
}
容量相关类
reserve- 功能:为
unordered_map预留一定数量的桶(bucket),避免在插入元素时频繁进行哈希表的扩容操作,从而提高插入效率。 - 示例代码:
- 功能:为
#include <iostream>
#include <unordered_map>
#include <string>int main() {std::unordered_map<int, std::string> umap;umap.reserve(100);for (int i = 0; i < 50; ++i) {umap[i] = std::to_string(i);}return 0;
}
rehash- 功能:设置
unordered_map的桶数量。如果指定的桶数量小于当前元素数量,可能会导致哈希表重新哈希以适应新的桶数量。 - 示例代码:
- 功能:设置
#include <iostream>
#include <unordered_map>
#include <string>int main() {std::unordered_map<int, std::string> umap = {{1, "one"}, {2, "two"}};umap.rehash(10);return 0;
}
哈希策略相关类
load_factor- 功能:返回
unordered_map当前的负载因子,即元素数量与桶数量的比值。负载因子过高可能会导致哈希冲突增加,影响性能。 - 示例代码:
- 功能:返回
#include <iostream>
#include <unordered_map>
#include <string>int main() {std::unordered_map<int, std::string> umap = {{1, "one"}, {2, "two"}};std::cout << "Load factor: " << umap.load_factor() << std::endl;return 0;
}
max_load_factor- 功能:可以设置或获取
unordered_map的最大负载因子。当负载因子超过最大负载因子时,哈希表会自动进行扩容。 - 示例代码:
- 功能:可以设置或获取
#include <iostream>
#include <unordered_map>
#include <string>int main() {std::unordered_map<int, std::string> umap;umap.max_load_factor(0.5);std::cout << "Max load factor: " << umap.max_load_factor() << std::endl;return 0;
}
std::unordered_set
std::unordered_set 的很多函数和用法与 std::unordered_map 类似,以下是一些额外的特点和示例:
元素操作类
emplace和emplace_hint- 功能:与
unordered_map中的emplace和emplace_hint类似,用于原位构造元素并插入到unordered_set中。 - 示例代码:
- 功能:与
#include <iostream>
#include <unordered_set>int main() {std::unordered_set<int> uset;uset.emplace(1);auto hint = uset.begin();uset.emplace_hint(hint, 2);for (const auto& num : uset) {std::cout << num << " ";}std::cout << std::endl;return 0;
}
容量和哈希策略相关类
unordered_set 同样支持 reserve、rehash、load_factor 和 max_load_factor 等函数,用法与 unordered_map 一致,用于管理容量和哈希策略。
相关文章:
unordered_set 的常用函数
在 C 的标准库中,std::unordered_set 是基于哈希表实现的哈希集合。下面介绍这种语言里哈希集合的常用函数。 C std::unordered_set 1. 元素操作 insert 功能:向哈希集合中插入元素。如果元素已经存在,则不会重复插入。示例代码:…...
若依框架-给sys_user表添加新字段并获取当前登录用户的该字段值
目录 添加字段 修改SysUser类 修改SysUserMapper.xml 修改user.js 前端获取字段值 添加字段 若依框架的sys_user表是没有age字段的,但由于业务需求,我需要新添加一个age字段: 修改SysUser类 添加age字段后,要在SysUser类 …...
前端监测窗口尺寸和元素尺寸变化的方法
前端监测窗口尺寸变化和元素尺寸变化的方法 window.resize 简介 window.resize事件是浏览器提供的一种事件,用于监听窗口大小的改变。这意味着当用户调整浏览器窗口大小时,相关的JavaScript代码将被触发执行。这为开发者提供了一种机制,可…...
angular中下载接口返回文件
目录 一、URL.createObjectURL() 一、URL.createObjectURL() createObjectURL属于js的原生方法,位于window.URL上,用于将Blob或者File文件转换为可以临时的URL地址进行显示 **注意**:Angular 的 HttpClient 默认将响应解析为 JSON 对象16。…...
ubuntu 部署deepseek
更新 apt update 升级 apt upgrade 格式化硬盘 mkfs.ext4 /dev/sdb 安装nginx 查看端口 一、安装Ollama Ollama是一个开源的大型语言模型(LLM)推理服务器,为用户提供了灵活、安全和高性能的语言模型推理解决方案。 ollama/docs/linux.m…...
【每日学点HarmonyOS Next知识】拖拽调整列表顺序、tab回弹、自定义弹窗this、状态变量修饰枚举
1、HarmonyOS 功能实现(拖拽调整列表顺序)? 可参考: import curves from ohos.curves; import Curves from ohos.curvesEntry Component struct ListItemExample {State private arr: number[] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]…...
MySQL库和表的操作详解:从创建库到表的管理全面指南
目录 一、MySQL库的操作详解 〇、登录MySQL 一、数据库的创建与字符集设置 1. 创建数据库的语法 2. 创建数据库示例 查看创建出来的文件: bash下查看MySQL创建的文件 二、字符集与校验规则 1. 查看系统默认设置 2. 查看支持的字符集与校验规则 3. 校验规则对查询的影响…...
PyTorch 系列教程:使用CNN实现图像分类
图像分类是计算机视觉领域的一项基本任务,也是深度学习技术的一个常见应用。近年来,卷积神经网络(cnn)和PyTorch库的结合由于其易用性和鲁棒性已经成为执行图像分类的流行选择。 理解卷积神经网络(cnn) 卷…...
Docker下ARM64架构的源码编译Qt5.15.1,并移植到开发板上
Docker下ARM64架构的源码编译Qt5.15.1,并移植到开发板上 1、环境介绍 QT版本:5.15.1 待移植环境: jetson nano 系列开发板 aarch64架构(arm64) 编译环境: 虚拟机Ubuntu18.04(x86_64) 2、…...
Java 大视界 -- Java 大数据中的数据可视化大屏设计与开发实战(127)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
starrocks批量启停脚本
#!/bin/bash # 定义 StarRocks 安装目录 STARROCKS_HOME"/path/to/starrocks" # 定义 FE 和 BE 节点列表 FE_NODES("fe_node1_ip" "fe_node2_ip" "fe_node3_ip") BE_NODES("be_node1_ip" "be_node2_ip" "be_…...
「Unity3D」UGUI将元素固定在,距离屏幕边缘的某个比例,以及保持元素自身比例
在不同分辨率的屏幕下,UI元素按照自身像素大小,会发生位置与比例的变化,本文仅利用锚点(Anchors)使用,来实现UI元素,固定在某个比例距离的屏幕边缘。 首先,将元素的锚点设置为中心&…...
4.3 数组和集合的初始及赋值
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商…...
Deep research深度研究:ChatGPT/ Gemini/ Perplexity/ Grok哪家最强?(实测对比分析)
目前推出深度研究和深度检索的AI大模型有四家: OpenAI和Gemini 的deep research,以及Perplexity 和Grok的deep search,都能生成带参考文献引用的主题报告。 致力于“几分钟之内生成一份完整的主题调研报告,解决人力几小时甚至几天…...
关于sqlalchemy的ORM的使用
关于sqlalchemy的ORM的使用 二、创建表三、使用数据表、查询记录三、批量插入数据四、关于with...as...:的使用 二、创建表 使用Mapped来映射字段 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker,Mapped,mapped_columnBa…...
【leetcode hot 100 148】排序序列
解法一:(双重循环)第一个循环head,逐步将head的node加入有序列表;第二个循环在有序列表中找到合适的位置,插入node。 /*** Definition for singly-linked list.* public class ListNode {* int val;* …...
3-001:MySQL 中的回表是什么?
1. 什么是回表? 回表(Back to Table) 指的是 在使用非聚簇索引(辅助索引)查询时,MySQL 需要 先通过索引找到主键 ID,然后再回到主键索引(聚簇索引)查询完整数据…...
单片机设计暖脚器研究
标题:单片机设计暖脚器研究 内容:1.摘要 本文聚焦于基于单片机设计暖脚器的研究。背景方面,在寒冷季节,暖脚器能有效改善脚部寒冷状况,提升人们的舒适度,但传统暖脚器存在功能单一、温控不准确等问题。目的是设计一款智能、高效且…...
【Linux】在VMWare中安装Ubuntu操作系统(2025最新_Ubuntu 24.04.2)#VMware安装Ubuntu实战分享#
今天田辛老师为大家带来一篇关于在VMWare虚拟机上安装Ubuntu系统的详细教程。无论是学习、开发还是测试,虚拟机都是一个非常实用的工具,它允许我们在同一台物理机上运行多个操作系统。Ubuntu作为一款开源、免费且用户友好的Linux发行版,深受广…...
AutoGen学习笔记系列(十三)Advanced - Logging
这篇文章瞄的是AutoGen官方教学文档 Advanced 章节中的 Logging 篇章,介绍了怎样在使用过程中添加日志信息,其实就是使用了python自带的日志库 logging。 官网链接:https://microsoft.github.io/autogen/stable/user-guide/agentchat-user-g…...
scrcpy pc机远程 无线 控制android app 查看调试log
背景: 公司的安卓机,是那种大屏幕的连接usb外设的。不好挪动,占地方,不能直接连接pc机上的android stduio来调试。 所以从网上找了一个python adb.exe控制器,可以局域网内远程控制开发的app,并在android stduio上看…...
UE5.5 Niagara发射器更新属性
发射器属性 在 Niagara 里,Emitter 负责控制粒子生成的规则和行为。不同的 Emitter 属性决定了如何发射粒子、粒子如何模拟、计算方式等。 发射器 本地空间(Local Space) 控制粒子是否跟随发射器(Emitter)移动。 ✅…...
深度剖析Redis:双写一致性问题及解决方案全景解析
在高并发场景下,缓存与数据库的双写一致性是每个开发者必须直面的核心挑战。本文通过5大解决方案,带你彻底攻克这一技术难关! 一、问题全景图:当缓存遇到数据库 1.1 典型问题场景 // 典型问题代码示例 public void updateProduc…...
MongoDB备份与还原
备份恢复工具介绍 1)mongoexport/mongoimport 2)mongodump/mongorestore 备份工具区别 mongoexport/mongoimport 导入/导出的是JSON格式或者CSV格式 mongodump/mongorestore 导入/导出的是BSON格式。二进制方式,速度快 1)…...
计算机:基于深度学习的Web应用安全漏洞检测与扫描
目录 前言 课题背景和意义 实现技术思路 一、算法理论基础 1.1 网络爬虫 1.2 漏洞检测 二、 数据集 三、实验及结果分析 3.1 实验环境搭建 3.2 模型训练 最后 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,…...
postgresql14编译安装脚本
#!/bin/bash####################################readme################################### #先上传postgresql源码包,再配置yum源,然后执行脚本 #备份官方yum源配置文件: #cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS…...
Java 大视界 -- Java 大数据在智能安防视频摘要与检索技术中的应用(128)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
部署项目至服务器:响应时间太长,无法访问此页面?
在我们部署项目到服务器上的时候,一顿操作猛如虎,打开页面..... 这里记录一下这种情况是怎么回事。一般就是服务器上的安全组没有放行端口。 因为我是用宝塔进行项目部署的。所以遇到这种情况,要去操作两边(宝塔and服务器所属平台…...
如何搭建一个适配微信小程序,h5,app的uni-app项目
在vscode搭建 uni-app 项目(Vue 3 Vite Pinia uView Plus) 一、环境准备 1. 安装 Node.js 确保已安装 Node.js(需≥14版本),可通过以下命令检查版本: node -v2. 安装 VSCode 从 VSCode 官网 下载并…...
【数据结构】List介绍
目录 1. 什么是List 2. 常见接口介绍 3. List的使用 1. 什么是List 在集合框架中,List是一个接口,继承自Collection。此时extends意为拓展 Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示&…...
