news 2026/7/9 23:41:35

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/7/10 11:26:59

EmotiVoice在博物馆导览系统中的智能化升级应用

EmotiVoice在博物馆导览系统中的智能化升级应用 在一座安静的博物馆展厅里&#xff0c;一位游客驻足于一件距今三千年的青铜器前。耳边响起的声音不再是千篇一律、机械单调的讲解&#xff0c;而是一位沉稳如考古学家般的男声&#xff0c;语气中带着敬畏与发现的喜悦&#xff1a…

作者头像 李华
网站建设 2026/7/10 12:04:01

EmotiVoice语音合成在医疗陪护机器人中的应用前景

EmotiVoice语音合成在医疗陪护机器人中的应用前景 在一间安静的养老院房间里&#xff0c;一位年近八旬的老人正坐在轮椅上。他的子女常年在国外工作&#xff0c;平日里陪伴他的只有一台外形温和、带屏幕的护理机器人。当系统检测到他连续两小时未起身活动时&#xff0c;机器人缓…

作者头像 李华
网站建设 2026/7/9 17:20:03

屏幕录制新选择:vokoscreenNG如何解决你的录制难题

屏幕录制新选择&#xff1a;vokoscreenNG如何解决你的录制难题 【免费下载链接】vokoscreenNG vokoscreenNG is a powerful screencast creator in many languages to record the screen, an area or a window (Linux only). Recording of audio from multiple sources is supp…

作者头像 李华
网站建设 2026/7/10 11:57:36

一键部署EmotiVoice Docker镜像的操作步骤

一键部署 EmotiVoice Docker 镜像的操作步骤 在语音交互日益成为主流人机接口的今天&#xff0c;用户对“机器说话”的期待早已不再满足于简单的信息播报。他们希望听到更自然、更有情绪、甚至带有“人格感”的声音——无论是陪伴型AI助手的一句温柔问候&#xff0c;还是游戏角…

作者头像 李华
网站建设 2026/7/10 5:28:23

语音合成艺术化探索:用EmotiVoice创作声音装置

语音合成艺术化探索&#xff1a;用EmotiVoice创作声音装置 在一场关于“记忆”的互动展览中&#xff0c;观众走近一座老式留声机雕塑。它缓缓启动&#xff0c;播放一段低语&#xff1a;“那年夏天&#xff0c;我们还在河边捉蜻蜓。”声音温柔而略带颤抖——是怀念&#xff1f;…

作者头像 李华
网站建设 2026/7/9 21:59:34

7、Web应用程序漏洞检测与自动化扫描工具指南

Web应用程序漏洞检测与自动化扫描工具指南 在网络安全领域,对Web应用程序进行漏洞检测是至关重要的。本文将介绍文件包含漏洞检测、POODLE漏洞识别以及几种常用的自动化扫描工具的使用方法。 文件包含漏洞检测 文件包含漏洞通常在开发人员使用可被用户修改的请求参数来动态…

作者头像 李华