news 2026/4/17 21:20:04

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/18 9:42:52

EmotiVoice在语音搜索结果朗读中的精准断句处理

EmotiVoice在语音搜索结果朗读中的精准断句处理 在智能语音助手、车载导航播报或无障碍阅读场景中&#xff0c;我们常常会遇到这样的问题&#xff1a;明明文字信息清晰完整&#xff0c;但机器一读出来就变得“一口气到底”&#xff0c;语义模糊&#xff0c;甚至让人误解内容。尤…

作者头像 李华
网站建设 2026/4/18 11:18:02

EmotiVoice能否用于外语学习发音纠正?清晰度评估

EmotiVoice能否用于外语学习发音纠正&#xff1f;清晰度评估 在语言学习的数字化浪潮中&#xff0c;一个核心挑战始终存在&#xff1a;如何让学习者听到“正确”的声音&#xff0c;并获得即时、有温度的反馈&#xff1f;传统的录音示范或教师指导虽有效&#xff0c;却受限于资源…

作者头像 李华
网站建设 2026/4/18 12:25:38

19、探索强大的Perl编程:从入门到网站链接检查实践

探索强大的Perl编程:从入门到网站链接检查实践 1. Perl简介 Perl是由Larry Wall在20世纪80年代末发明的。当时,他需要一种比shell脚本功能更强大,但又不像C等结构化语言那样正式的编程语言,于是Perl应运而生。Perl是一种让人又爱又恨的语言,很少有人对它持中立态度。不过…

作者头像 李华
网站建设 2026/4/18 3:29:17

EmotiVoice在语音祝福卡片中的节日氛围营造

EmotiVoice在语音祝福卡片中的节日氛围营造 在春节的夜晚&#xff0c;一张电子贺卡轻轻弹出&#xff0c;熟悉的母亲声音缓缓响起&#xff1a;“宝贝&#xff0c;新年快乐&#xff0c;妈妈想你了。”没有华丽的特效&#xff0c;却让人瞬间红了眼眶。这样的场景正从科幻走向现实…

作者头像 李华
网站建设 2026/4/17 5:42:02

CVE-2025-66165:merkulove Lottier for WPBakery插件中的授权缺失漏洞详解

CVE-2025-66165: merkulove Lottier for WPBakery 中的授权缺失漏洞 严重性: 待定 类型: 漏洞 CVE编号: CVE-2025-66165 在 merkulove 开发的 WordPress 插件 Lottier for WPBakery&#xff08;插件标识符&#xff1a;lottier-wpbakery&#xff09;中存在一个授权缺失漏洞。该漏…

作者头像 李华