第二天 哈希

news/2025/11/20 13:53:54/文章来源:https://www.cnblogs.com/xtl-learning/p/19246128

第二天 哈希

Posted on 2025-11-20 13:50  熊兔  阅读(0)  评论(0)    收藏  举报
 哈希表的初始化
#include <iostream>
#include <unordered_map>  // 包含哈希表头文件
#include <string>using namespace std;int main() {// 1. 声明和初始化哈希表// 创建一个键为string类型,值为int类型的哈希表unordered_map<string, int> ageMap;// 2. 插入键值对的三种方法 // 方法1:使用insert函数和pairageMap.insert(pair<string, int>("Alice", 25));// 方法2:使用insert函数和make_pairageMap.insert(make_pair("Bob", 30));// 方法3:使用下标操作符(如果键不存在会自动创建)ageMap["Charlie"] = 28;return 0;
}
 判断容量
void capacityFunctions() {unordered_map<int, string> map = {{1, "one"}, {2, "two"}};// empty() - 检查容器是否为空bool isEmpty = map.empty();  // 返回false// size() - 返回元素数量size_t elementCount = map.size();  // 返回2// max_size() - 返回可容纳的最大元素数size_t maxElements = map.max_size();cout << "是否为空: " << isEmpty << endl;cout << "元素数量: " << elementCount << endl;cout << "最大容量: " << maxElements << endl;
}
 访问成员函数和异常访问方式
void accessFunctions() {unordered_map<string, int> ageMap = {{"Alice", 25}, {"Bob", 30}};// operator[] - 访问或插入元素ageMap["Charlie"] = 28;           // 插入新元素int aliceAge = ageMap["Alice"];   // 访问现有元素// at() - 安全访问,会检查边界try {int bobAge = ageMap.at("Bob");     // 正常访问int davidAge = ageMap.at("David"); // 抛出std::out_of_range异常} catch (const out_of_range& e) {cout << "键不存在: " << e.what() << endl;}
}//try异常访问
try {int bobAge = ageMap.at("Bob");     // 正常访问,不会抛出异常int davidAge = ageMap.at("David"); // 键不存在,抛出std::out_of_range异常
} catch (const out_of_range& e) {cout << "键不存在: " << e.what() << endl;
}
//当try块中抛出异常时,程序跳转到匹配的catch块
//const out_of_range& e:捕获out_of_range类型的异常
//e是异常对象的引用
查找成员函数
void lookupFunctions() {unordered_map<string, int> map = {{"apple", 5}, {"banana", 3}};// find() - 查找元素,返回迭代器auto it = map.find("apple");if (it != map.end()) {cout << "找到apple: " << it->second << endl;}// count() - 返回匹配键的数量(0或1)size_t count = map.count("banana");  // 返回1count = map.count("cherry");         // 返回0// equal_range() - 返回匹配键的范围(对unordered_map用处有限)auto range = map.equal_range("apple");// 查找键为"apple"的所有元素for (auto i = range.first; i != range.second; ++i) { //i++和++i对输出没用影响cout << i->first << ": " << i->second << endl; //i->first:访问键(key),i->second:访问值(value)}// contains() - C++20引入,检查是否包含键#if __cplusplus >= 202002Lbool hasApple = map.contains("apple");  // 返回true#endif
}
桶成员函数
void bucketFunctions() {unordered_map<int, string> map = {{1, "one"}, {2, "two"}, {3, "three"}};// bucket_count() - 返回桶的数量size_t bucketCount = map.bucket_count();cout << "桶数量: " << bucketCount << endl;// max_bucket_count() - 最大桶数量size_t maxBuckets = map.max_bucket_count();// bucket_size(n) - 返回第n个桶中的元素数量for (size_t i = 0; i < bucketCount; ++i) {cout << "桶 " << i << " 有 " << map.bucket_size(i) << " 个元素" << endl;}// bucket(key) - 返回键所在的桶索引size_t bucketIndex = map.bucket(2);cout << "键2在桶: " << bucketIndex << endl;
}
哈希策略成员函数
void hashPolicyFunctions() {unordered_map<int, string> map;// load_factor() - 当前负载因子float currentLoad = map.load_factor();// max_load_factor() - 获取或设置最大负载因子float maxLoad = map.max_load_factor();  // 获取map.max_load_factor(0.75f);             // 设置// rehash(n) - 设置桶的数量为至少nmap.rehash(20);// reserve(n) - 预留空间用于至少n个元素map.reserve(100);cout << "当前负载因子: " << currentLoad << endl;cout << "最大负载因子: " << maxLoad << endl;
}
观察器成员函数
void observerFunctions() {unordered_map<string, int> map;// hash_function() - 返回哈希函数对象auto hashFunc = map.hash_function();size_t hashValue = hashFunc("test");// key_eq() - 返回键比较函数对象auto keyEqual = map.key_eq();bool keysEqual = keyEqual("a", "a");// get_allocator() - 返回分配器auto allocator = map.get_allocator();cout << "字符串'test'的哈希值: " << hashValue << endl;cout << "键比较结果: " << keysEqual << endl;
}
迭代器成员函数
// 定义一个名为 iteratorFunctions 的函数,返回类型为 void(不返回值)
void iteratorFunctions() {// 创建一个 unordered_map(哈希表),键为 int 类型,值为 string 类型// 并用初始化列表初始化三个键值对:1->"one", 2->"two", 3->"three"unordered_map<int, string> map = {{1, "one"}, {2, "two"}, {3, "three"}};// 输出提示信息,表示接下来是正序遍历cout << "正序遍历:" << endl;// 开始 for 循环,使用迭代器遍历哈希表// map.begin() 返回指向第一个元素的迭代器// map.end() 返回指向最后一个元素之后位置的迭代器// ++it 每次循环将迭代器向前移动一个位置for (auto it = map.begin(); it != map.end(); ++it) {// 通过迭代器访问当前元素的键和值// it->first 获取键(key),it->second 获取值(value)cout << it->first << ": " << it->second << endl;}// 输出提示信息,表示接下来使用 const 迭代器遍历cout << "const迭代器遍历:" << endl;// 开始 for 循环,使用 const 迭代器遍历// map.cbegin() 返回指向第一个元素的 const 迭代器(不能修改元素)// map.cend() 返回指向最后一个元素之后位置的 const 迭代器for (auto it = map.cbegin(); it != map.cend(); ++it) {// 通过 const 迭代器访问元素(只能读取,不能修改)cout << it->first << ": " << it->second << endl;}// 开始遍历哈希表的每个桶(bucket)// map.bucket_count() 返回哈希表中桶的总数量// size_t i = 0 初始化循环计数器,从第0个桶开始// i < map.bucket_count() 循环条件,遍历所有桶// ++i 每次循环计数器加1for (size_t i = 0; i < map.bucket_count(); ++i) {// 输出当前桶的编号cout << "桶" << i << "中的元素: ";// 开始内层循环,遍历当前桶中的所有元素// map.begin(i) 返回指向第i个桶中第一个元素的迭代器// map.end(i) 返回指向第i个桶中最后一个元素之后位置的迭代器for (auto local_it = map.begin(i); local_it != map.end(i); ++local_it) {// 输出当前元素的键cout << local_it->first << " ";}// 换行,结束当前桶的输出cout << endl;}
}
// 函数结束

 

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

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

相关文章

邵阳一对一家教辅导机构推荐:2025年最新权威榜,全学段提分不踩坑

在邵阳,小初高家长找一对一辅导机构的困惑随处可见:双清区小学家长愁语数英补基础没效果,花了钱成绩不动;大祥区初中家长急物理化学提分难,怕遇到“半吊子”家教;北塔区高中家长慌培优冲分没方向,难寻靠谱平台;…

衡阳一对一家教辅导机构推荐:2025年真实测评榜单

一、衡阳小初高家长的 “选机构难”:全学段痛点集中爆发 不管是补小学语数英基础、初中中考提分,还是高中高考补漏,衡阳各区县家长找一对一辅导机构都愁眉不展: 蒸湘区小学家长天天问 “衡阳一对一家教平台哪个好”…

省着用,反而坏的更快

为什么“省着用”反而会烧坏电机? 一款在欧洲销量与口碑双丰收的家用搅拌机,决定进军全球市场。凭借过往的优秀数据,公司对这款“功勋产品”充满信心。 然而,销售不久,一盆冷水当头泼下:客户投诉率急剧上升,而绝…

2025马鞍山一对一家教机构推荐:五大辅导机构测评排行榜,综合实力全解析!

马鞍山小学、初中、高中家长为孩子选课外补习时,即便目标明确是找一对一辅导或家教,仍会被新难题困住。不少教育机构的课外补习与培训嘴上喊着“定制实用方案”,实际试听走形式——孩子听着吃力、跟不上节奏,机构却…

2025淮北一对一家教机构推荐:五大辅导机构测评排行榜,综合实力全解析!

淮北家长为孩子选小学、初中、高中课外一对一补习时,既想通过语文、数学、英语三大主科筑牢基础,也盼借助辅导实现培优,可找家教或教育机构开展培训、补课的过程中,新难题不断。有的机构宣称“按孩子性格与习惯定制…

淮北一对一辅导机构权威排行榜推荐:2025家教机构穿透式测评!

淮北家长为孩子选小学、初中、高中课外一对一补习时,既希望借语文、数学、英语辅导筑牢基础,也盼通过培训实现培优,可找家教或教育机构的过程中,新难题不断。不少机构试听时,语文互动课堂、数学解题指导格外用心,…

2025年环保纸袋批发厂家权威推荐榜单:防油纸袋/打包纸袋/三边封纸袋源头厂家精选

在限塑令与绿色消费趋势下,一批具备专业生产能力和规模化供给的厂家正支撑着环保纸袋市场的需求。 随着全球环保政策的持续推进和消费者环保意识的提升,环保纸袋作为塑料包装的重要替代品,其市场需求持续增长。产品…

2025年建筑阳光板源头厂家权威推荐榜单:10mm阳光板/中空阳光板/阻燃阳光板生产厂家精选

随着绿色建筑理念的普及和建筑采光需求的提升,建筑阳光板作为传统玻璃的替代材料,其市场规模持续扩大。聚碳酸酯(PC)板材凭借优异的抗冲击性、良好的透光性和阻燃性能,在体育场馆、农业温室、工业厂房等建筑领域应…

马鞍山一对一辅导机构权威排行榜推荐:2025家教机构穿透式测评!

马鞍山小学、初中、高中家长为孩子挑选课外一对一补习时,即便明确要找家教或辅导机构,仍会陷入新的选择困境。想选靠谱的机构,对方却只宣称师资 “有经验”,既不提供师资背景核验渠道,也不展示真实教学案例,家长…

电流互感器技术方案深度解析:从传统电磁到新型光学方案

文章介绍了多种电流测量技术,涵盖电磁式、罗氏线圈、光学和混合式互感器,强调其技术特点、优势及应用前景。随着电力系统向智能化、数字化方向发展,电流测量技术面临新的挑战。传统电磁式电流互感器采用硅钢片铁芯和…

面试JAVASE基础(五)——Java 集合体系 - 教程

面试JAVASE基础(五)——Java 集合体系 - 教程2025-11-20 13:39 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display:…

Jmeter快速上手操作

JMeter快速上手操作手册 本手册适用于JMeter新手,旨在通过“理论+实操”的形式,帮助快速掌握接口性能测试的核心流程。手册基于JMeter 5.x版本编写,其他版本操作逻辑基本一致。 一、前置准备:环境搭建与工具安装 1…

TalentsAI ——专家级大模型数据标注平台

TalentsAI 是一家由顶级基金投资、由头部大模型团队骨干与上市公司高管联合创立的专家级数据标注平台。 平台专注于利用全球专业人士的知识与深度经验,为新一代人工智能模型提供高质量、高可信度的专家数据,帮助 AI …

“省着用”,反而坏的越快?

一款在欧洲销量与口碑双丰收的家用搅拌机,决定进军全球市场。凭借过往的优秀数据,公司对这款“功勋产品”充满信心。 然而,销售不久,一盆冷水当头泼下:客户投诉率急剧上升,而绝大部分问题,都指向了电机烧毁。 初…

python requirements.txt

pip install pipreqs生成 requirements.txt 文件pipreqs ./ --encoding=utf8 --force安装依赖pip install -r requirements.txt

完整教程:Redis 特性/应用场景/通用命令

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

详解Dependency-Check中如何 使用suppression.xml 忽略某些已评估为低风险或不可利用的漏洞 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

unbuntu ssh输入密码无效

ssh jzrobot@192.168.10.149 密码不显示而已,实际已经输入成功

Why does Africa have a much larger population than the UK, but the USA has more English men.

Americans treat Africans what carnivores do to herbivores. The Indians, on the other hand, were completely exterminated, because they even can not contribute English any nutritions.