news 2026/4/16 11:52:11

csp信奥赛C++标准模板库STL(7):unordered_map的使用详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
csp信奥赛C++标准模板库STL(7):unordered_map的使用详解

csp信奥赛C++标准模板库STL(7):unordered_map的使用详解

一、unordered_map 概述

unordered_map是 C++ STL 中的关联容器,基于哈希表实现,提供 O(1) 平均时间复杂度的查找、插入和删除操作。

1.1 基本特性
  • 底层结构:哈希表(hash table)
  • 时间复杂度
    • 平均情况:O(1)
    • 最坏情况:O(n)
  • 元素顺序:无序(元素顺序与插入顺序无关)
  • 头文件#include <unordered_map>
  • C++版本:C++11 及以上

二、基本用法

2.1 声明和初始化
#include<iostream>#include<unordered_map>#include<string>usingnamespacestd;intmain(){// 1. 空unordered_mapunordered_map<int,string>mp1;// 2. 初始化列表unordered_map<string,int>mp2={{"apple",5},{"banana",3},{"orange",7}};// 3. 复制构造unordered_map<string,int>mp3(mp2);return0;}
2.2 常用操作
// 插入元素mp["apple"]=5;// 使用下标运算符mp.insert({"banana",3});// 使用insert方法mp.emplace("orange",7);// 原地构造,效率更高// 访问元素cout<<mp["apple"]<<endl;// 如果不存在会创建cout<<mp.at("banana")<<endl;// 如果不存在抛出异常// 查找元素autoit=mp.find("apple");if(it!=mp.end()){cout<<"Found: "<<it->first<<" -> "<<it->second<<endl;}// 删除元素mp.erase("apple");// 按键删除mp.erase(it);// 按迭代器删除// 遍历元素for(auto&pair:mp){cout<<pair.first<<": "<<pair.second<<endl;}// 大小相关cout<<"Size: "<<mp.size()<<endl;cout<<"Empty: "<<mp.empty()<<endl;mp.clear();// 清空

三、竞赛常用技巧

3.1 统计频率(最常见的应用)
// 统计数组中每个元素的出现次数vector<int>nums={1,2,3,2,1,3,3,3};unordered_map<int,int>freq;for(intnum:nums){freq[num]++;}// 输出频率for(auto&p:freq){cout<<p.first<<" appears "<<p.second<<" times"<<endl;}
3.2 两数之和问题
// 在数组中找到两个数,使它们的和等于目标值vector<int>twoSum(vector<int>&nums,inttarget){unordered_map<int,int>hash;// 值 -> 索引for(inti=0;i<nums.size();i++){intcomplement=target-nums[i];if(hash.find(complement)!=hash.end()){return{hash[complement],i};}hash[nums[i]]=i;}return{};}
3.3 字符串模式匹配
// 判断两个字符串是否为字母异位词boolisAnagram(string s,string t){if(s.length()!=t.length())returnfalse;unordered_map<char,int>count;for(charc:s)count[c]++;for(charc:t){if(--count[c]<0)returnfalse;}returntrue;}

四、与map的对比

特性unordered_mapmap
底层实现哈希表红黑树
时间复杂度平均O(1),最差O(n)O(log n)
元素顺序无序按键排序
内存使用通常较少通常较多
适用场景频繁查找,不关心顺序需要有序遍历
选择建议:
  • 如果只需要快速查找,使用unordered_map
  • 如果需要有序遍历,使用map
  • 如果有大量数据且查找频繁,优先考虑unordered_map

总结

在CSP信奥赛中,unordered_map是最重要的数据结构之一,尤其适合:

  1. 需要快速查找的场景- O(1)的平均时间复杂度
  2. 统计频率- 计数、频率统计问题
  3. 缓存中间结果- 动态规划中的记忆化搜索
  4. 去重和存在性判断- 配合unordered_set使用

掌握好unordered_map的使用,能在竞赛中解决大量查找和统计类问题,是C++选手的必备技能。

各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}
  • 一、CSP信奥赛C++通关学习视频课:
    • C++语法基础
    • C++语法进阶
    • C++算法
    • C++数据结构
    • CSP信奥赛数学
    • CSP信奥赛STL
  • 二、CSP信奥赛C++竞赛拿奖视频课:
    • 信奥赛csp-j初赛高频考点解析
    • CSP信奥赛C++复赛集训课(12大高频考点专题集训)
  • 三、考级、竞赛刷题题单及题解:
    • GESP C++考级真题题解
    • CSP信奥赛C++初赛及复赛高频考点真题解析
    • CSP信奥赛C++一等奖通关刷题题单及题解

详细内容:

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转


2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

3、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

  • 2025 csp-j 复赛真题及答案解析(最新更新)
  • 2025 csp-x(山东) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(河南) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(辽宁) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(江西) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(广西) 复赛真题及答案解析(最新更新)
  • 2020 ~ 2024 csp 复赛真题题单及题解
  • 2019 ~ 2022 csp-j 初赛高频考点真题分类解析
  • 2021 ~ 2024 csp-s 初赛高频考点解析
  • 2023 ~ 2024 csp-x (山东)初赛真题及答案解析
  • 2024 csp-j 初赛真题及答案解析
  • 2025 csp-j 初赛真题及答案解析(最新更新)
  • 2025 csp-s 初赛真题及答案解析(最新更新)
  • 2025 csp-x (山东)初赛真题及答案解析(最新更新)
  • 2025 csp-x (江西)初赛真题及答案解析(最新更新)
  • 2025 csp-x (辽宁)初赛真题及答案解析(最新更新)

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

  • 129 道刷题练习和详细题解,涉及:模拟算法、数学思维、二分算法、 前缀和、差分、深搜、广搜、DP专题、 树和图

4、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 12:20:54

AI项目成立团队了

昨晚一个粉丝问我&#xff1a; 独孤&#xff0c;我艺术院校毕业&#xff0c;会绘图&#xff0c;可我发了几百个作品&#xff0c;点赞不少&#xff0c;就是不赚钱。 是不是我不适合做生意&#xff1f; 我看完只想笑。 你不是不适合&#xff0c;你是还在用穷人思维做富人生意…

作者头像 李华
网站建设 2026/4/9 6:54:04

C#.NET ref struct 深度解析:语义、限制与最佳实践

简介 ref struct 是 C# 7.2 引入的一种特殊结构体类型&#xff0c; 它与普通 struct 的最大区别是 严格限制其分配位置&#xff1a; ref struct 只能分配在栈&#xff08;stack&#xff09;上&#xff0c;不能分配在堆&#xff08;heap&#xff09;上。 ⚡ 设计初衷提高性能&am…

作者头像 李华
网站建设 2026/4/11 3:05:32

EmotiVoice语音合成模型体积大小与加载速度优化

EmotiVoice语音合成模型体积大小与加载速度优化 在智能语音交互日益普及的今天&#xff0c;用户不再满足于“能说话”的机器&#xff0c;而是期待更自然、富有情感的对话体验。从虚拟偶像直播到游戏NPC实时对白&#xff0c;再到个性化语音助手&#xff0c;高表现力的文本转语音…

作者头像 李华
网站建设 2026/4/14 19:09:47

如何在低延迟场景下优化EmotiVoice语音输出?

如何在低延迟场景下优化EmotiVoice语音输出&#xff1f; 在游戏NPC突然喊出“小心&#xff01;敌人来了&#xff01;”时&#xff0c;如果声音延迟半秒才响起——这不仅破坏沉浸感&#xff0c;甚至可能让玩家错失关键反应时机。类似问题广泛存在于实时语音交互系统中&#xff1…

作者头像 李华
网站建设 2026/4/16 9:55:20

语音克隆隐私保护机制:生物特征数据如何处理?

语音克隆隐私保护机制&#xff1a;生物特征数据如何处理&#xff1f; 在数字身份日益敏感的今天&#xff0c;你的声音可能比你想象中更“值钱”。 一段几秒钟的录音&#xff0c;就能被AI复制成近乎真人的语音——这不是科幻电影的情节&#xff0c;而是当前语音合成技术的真实能…

作者头像 李华