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

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中高频考点,尤其是两数之和这类哈希优化题!坚持手写,明天进入优先队列专题! 🔥

相关文章:

  • Spring Boot 接口开发实战指南
  • NumPy 数组计算:通用方法
  • 第12次03 :登录状态的保持
  • deepseek告诉您http与https有何区别?
  • 华清远见亮相第63届高博会,展示AI/嵌入式/物联网/具身智能全栈教学解决方案
  • 华为云物联网应用接入对于API及接口调试的梳理
  • 如何防止XSS攻击,保证前端的安全性?
  • 在 Unity 中,AOT和JIT的区别
  • 【Netty】- 聊天室1
  • 【Linux】进程信号(二):捕抓信号
  • Axure动态面板学习笔记
  • 如何做好一份“系统设计“文档
  • SQLMesh 用户定义变量详解:从全局到局部的全方位配置指南
  • 【身份证识别表格】把大量手机拍摄的身份证信息转换成EXCEL表格的数据,拍的身份证照片转成excel表格保存,基于WPF和腾讯OCR的实现方案
  • 【Linux】磁盘管理,虚拟机CentOS扩展根分区
  • STM32:Modbus通信协议核心解析:关键通信技术
  • RISC-V 开发板 MUSE Pi Pro RTSP 串流 CSI ov5647 摄像头
  • 基于本地模型+多级校验设计的高效缓存,有效节省token数量(有点鸡肋doge)。
  • 【Pandas】pandas DataFrame add_suffix
  • PSNR指标Pytorch实现
  • 深圳建设门户网站/中山疫情最新消息
  • 湖南营销型网站建设 A磐石网络/seo技术 快速网站排名
  • 蓝色脚手架织梦企业网站模板/怎么自己创建网址
  • 西宁网站建设的公司哪家好/百度指数移动版app
  • 资海网络一年做多少网站/成都网站seo技术
  • 游族网络公司最新消息/seo按照搜索引擎的什么对网站