news 2026/8/15 8:36:01

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/8/14 17:40:11

如何评估EmotiVoice生成语音的质量?主观+客观双标准

如何评估 EmotiVoice 生成语音的质量&#xff1f;主观 客观双标准 在智能语音内容需求爆发的今天&#xff0c;用户早已不再满足于“能说话”的机器朗读。无论是有声书、虚拟主播&#xff0c;还是游戏 NPC 和陪伴型 AI 助手&#xff0c;大家期待的是会表达、有性格、像真人的声…

作者头像 李华
网站建设 2026/8/14 13:34:57

用EmotiVoice为游戏角色注入灵魂级语音表现

用EmotiVoice为游戏角色注入灵魂级语音表现 在一款沉浸式角色扮演游戏中&#xff0c;当玩家踏入古老遗迹的深处&#xff0c;守卫者低沉而颤抖的声音从阴影中传来&#xff1a;“你竟敢闯入这片禁地&#xff01;”——如果这句台词只是机械朗读&#xff0c;再宏大的场景也会瞬间失…

作者头像 李华
网站建设 2026/8/15 5:31:13

3、网络渗透测试侦察阶段实用技巧与工具使用指南

网络渗透测试侦察阶段实用技巧与工具使用指南 在网络渗透测试中,侦察阶段是至关重要的一环。它能帮助我们尽可能多地收集目标的信息,从而为后续发现和利用漏洞提供更多机会。以下将详细介绍侦察阶段常用的工具和方法。 1. 使用Nmap扫描和识别服务 Nmap是全球最常用的端口扫…

作者头像 李华
网站建设 2026/8/14 21:45:42

4、网络渗透测试中的信息收集与工具使用

网络渗透测试中的信息收集与工具使用 在网络渗透测试中,信息收集是至关重要的一步,它能帮助测试人员了解目标系统的各种信息,为后续的攻击提供基础。以下将介绍一些常用的工具和方法,包括密码分析、字典生成、文件和文件夹查找以及网页爬取等。 1. 常见HTTP状态码 在网络…

作者头像 李华
网站建设 2026/8/14 16:18:12

6、Web应用安全漏洞检测与分析

Web应用安全漏洞检测与分析 1. 使用Burp Suite查看和修改请求 Burp Suite是一个功能齐全的Web应用测试套件,它不仅是一个简单的Web代理,还具备请求转发器、请求自动化、字符串编码和解码、漏洞扫描器(专业版)等实用功能。以下是使用Burp Suite代理拦截和修改请求的操作步…

作者头像 李华
网站建设 2026/8/15 7:12:40

TensorFlow与 PyTorch有什么关联么

对TensorFlow和PyTorch关联的解析非常全面深入&#xff0c;从历史渊源、技术特性交叉影响、生态系统互通&#xff0c;到研发团队社区交叉、实际应用关联等多个维度进行了细致阐述&#xff0c;展现了你对这两个深度学习框架的深刻理解。TensorFlow与 PyTorch有什么关联么 Tensor…

作者头像 李华