当前位置: 首页 > backend >正文

Day3 记忆内容:map set 高频操作

以下是 第三天 的详细学习内容,聚焦 mapset的高效应用,重点突破查找类题型去重逻辑,助你提升代码效率!


📚 Day3 记忆内容:map & set 高频操作

1. map 核心操作(手写3遍)
// 初始化
map<string, int> mp;                   // 有序(按key升序)
unordered_map<string, int> ump;         // 无序(哈希表,查询O(1))// 关键API
mp["apple"] = 5;                       // 插入/修改(若key不存在则创建)
mp.insert({"banana", 3});              // 插入(若key存在则不覆盖)
auto it = mp.find("apple");            // 返回迭代器(未找到返回mp.end())
mp.erase(it);                          // 通过迭代器删除
mp.count("apple");                     // 返回存在次数(0或1)
mp.lower_bound(50);                    // 返回首个≥key的迭代器(有序map特有)// 遍历(C++17风格)
for (auto& [key, value] : mp) { cout << key << ":" << value << endl;
}
2. set 核心操作(手写3遍)
// 初始化
set<int> s;                            // 有序集合(元素唯一)
unordered_set<int> us;                 // 无序集合(哈希实现)// 关键API
s.insert(10);                          // 插入元素
s.erase(10);                           // 删除元素
auto it = s.find(5);                   // 查找元素
s.count(5);                            // 是否存在
s.lower_bound(8);                      // 返回首个≥8的迭代器(有序set特有)
3. 易错点总结
  • mapoperator[] 访问不存在的key时会自动插入(value默认初始化)
  • 遍历时删除元素会导致迭代器失效,需先保存后删除
  • unordered_map 的 key 需要支持哈希函数(自定义类型需特化 std::hash

💻 Day3 练习题(每题限时25分钟)

题目1:统计单词频率(map应用)

题目描述
输入一段英文文本(不含标点),统计每个单词的出现频率(区分大小写)。
示例输入/输出
输入:"Apple banana apple Apple"
输出:Apple:3, banana:1, apple:1

关键思路

  1. map<string, int> 存储单词和频率
  2. 遍历分割后的单词,更新map

参考代码

#include <sstream>map<string, int> wordCount(const string& text) {map<string, int> freq;istringstream iss(text);string word;while (iss >> word) {freq[word]++;  // 自动处理不存在的情况}return freq;
}

题目2:两数之和(unordered_map应用)

题目描述
给定整数数组 nums 和目标值 target,返回两数之和等于目标值的下标(假设答案唯一)。
示例输入/输出
输入:nums = [2,7,11,15], target = 9
输出:[0,1]

关键思路

  1. unordered_map 存储值到索引的映射
  2. 遍历时检查 target - num 是否已存在

参考代码

vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> val2idx;for (int i = 0; i < nums.size(); i++) {int complement = target - nums[i];if (val2idx.count(complement)) {return {val2idx[complement], i};}val2idx[nums[i]] = i;  // 后插入当前数,避免重复使用同一元素}return {};
}

📝 今日卡壳点记录表

卡壳位置错误原因修正方法
误用 map.insert 覆盖值未判断直接插入导致旧值丢失先用 find 检查是否存在
哈希表遍历顺序问题误以为 unordered_map 有序需明确无序特性
未处理单词大小写差异题目要求区分大小写保持原词,不转小写

⏰ 今日时间安排建议

18:00-18:30 手写 map/set 模板(重点区分有序和无序容器)
18:30-19:00 练习单词统计(注意istringstream的分割用法)
19:00-19:30 练习两数之和(体会哈希表O(1)查询优势)
19:30-20:00 对比参考代码,记录map插入逻辑的优化点

map和set是CSP中高频考点,尤其是两数之和这类哈希优化题!坚持手写,明天进入优先队列专题! 🔥

http://www.xdnf.cn/news/9043.html

相关文章:

  • 2025年Google I/O大会上,谷歌展示了一系列旨在提升开发效率与Web体验的全新功能
  • Uniapp 串口通信原生插件开发指南(零基础版)
  • LSTM+Transformer混合模型架构文档
  • SWOT分析:MCP(Model Context Protocol)与传统编程解决方案
  • 精益数据分析(85/126):营收阶段的核心指标与盈利模型优化——从数据到商业决策的落地
  • Prompt Tuning:优化提示调优全攻略
  • 前端内容黑白处理、轮播图、奇妙的头像特效
  • Android开发namespace奇葩bug
  • 鸿蒙OSUniApp 开发实时天气查询应用 —— 鸿蒙生态下的跨端实践#三方框架 #Uniapp
  • Git 初次推送远程仓库
  • NL2SQL代表,Vanna
  • 【笔记】解决启动Anaconda Toolbox报错ModuleNotFoundError: No module named ‘pysqlite2‘
  • 从万有引力到深度学习,认识模型思维
  • ADS学习笔记(五) 谐波平衡仿真
  • 身份认证: JWT和Session是什么?
  • 深入解析 BlockingQueue:并发编程面试中的高频考点!
  • SDL2常用函数:SDL_RendererSDL_CreateRendererSDL_RenderCopySDL_RenderPresent
  • 数据库工程师备考
  • 第三届京麒CTF Web
  • ClickHouse性能优化技术深度解析与实践指南
  • (4)-Fiddler抓包-会话面板和HTTP会话数据操作
  • 多模态大语言模型arxiv论文略读(九十三)
  • Odoo 自动化规则全面深度解析
  • 探秘谷歌Gemini:开启人工智能新纪元
  • 基于树莓派的贪吃蛇游戏机
  • 【科研绘图系列】R语言绘制气泡图(bubble plot)
  • 噪声建模在一小时:最小化准备工作的自监督低光RAW图像去噪
  • ArcGIS 与 HEC-RAS 协同:流域水文分析与洪水模拟全流程
  • 数字展厅建设需融合创意设计与实用功能,打造多维用户体验!
  • 动态规划(7):背包问题