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

C++的map.values获取map所有value实现

在 C++ 的 STL 中,std::map 没有直接的 values() 方法来获取所有值,但可以通过迭代器或 range-based for 循环来提取所有值。

C++ 实现对比:

Kotlin 的实现:

valmap=HashMap<String,MutableList<String>>()// ... 填充数据returnmap.values.toList()// 直接获取所有值并转为列表

C++ 的类似实现:

#include<vector>#include<string>#include<map>#include<algorithm>std::vector<std::vector<std::string>>groupAnagrams(std::vector<std::string>&strs){std::map<std::string,std::vector<std::string>>anagramMap;for(constauto&str:strs){std::string key=str;std::sort(key.begin(),key.end());// 排序作为键anagramMap[key].push_back(str);// C++ map 会自动创建不存在的键}// 提取所有值到结果向量中std::vector<std::vector<std::string>>result;for(constauto&pair:anagramMap){result.push_back(pair.second);}returnresult;}

STL 中 std::map 的常用方法:

  1. 直接插入/访问:
std::map<std::string,std::vector<std::string>>m;m[key].push_back(value);// 如果 key 不存在,会自动创建
  1. 获取所有键值对:
for(constauto&kv:m){std::string key=kv.first;std::vector<std::string>value=kv.second;}
  1. 获取所有值(需要手动提取):
std::vector<std::vector<std::string>>values;for(constauto&kv:m){values.push_back(kv.second);}

C++ 与 Kotlin 的对比:

操作 Kotlin (HashMap) C++ (std::map)
创建 HashMap<K, V>() std::map<K, V> m;
插入 map[key] = value m[key] = value; 或 m.insert({key, value})
访问 map[key] (可为 null) m[key] (自动创建) 或 m.at(key) (异常)
检查键 containsKey(key) m.count(key) > 0 或 m.find(key) != m.end()
获取值集合 map.values 需要遍历提取
获取键集合 map.keys 需要遍历提取

C++ 完整示例:

#include<iostream>#include<vector>#include<string>#include<unordered_map>// 更常用,类似 HashMap#include<algorithm>std::vector<std::vector<std::string>>groupAnagrams(std::vector<std::string>&strs){// 使用 unordered_map 效率更高(类似 Kotlin 的 HashMap)std::unordered_map<std::string,std::vector<std::string>>anagramMap;for(constauto&str:strs){std::string key=str;std::sort(key.begin(),key.end());anagramMap[key].push_back(str);}// 提取所有值std::vector<std::vector<std::string>>result;result.reserve(anagramMap.size());// 预分配空间// 方法1:range-based for 循环for(constauto&pair:anagramMap){result.push_back(pair.second);}// 方法2:使用 transform 算法// std::transform(anagramMap.begin(), anagramMap.end(),// std::back_inserter(result),// [](const auto& pair) { return pair.second; });returnresult;}intmain(){std::vector<std::string>strs={"eat","tea","tan","ate","nat","bat"};autoresult=groupAnagrams(strs);for(constauto&group:result){for(constauto&word:group){std::cout<<word<<" ";}std::cout<<std::endl;}return0;}

总结:

· Kotlin 的 map.values 是集合视图,可以直接获取所有值
· C++ 的 STL map 没有直接的 values() 方法,需要手动遍历提取
· 对于这个问题,建议使用 std::unordered_map(哈希表)而不是 std::map(红黑树),因为前者平均时间复杂度 O(1),更接近 Kotlin 的 HashMap 行为

http://www.cnnetsun.cn/news/6743.html

相关文章:

  • typing和dataclass
  • MindSpore网络编译问题BuildModel error 134
  • 拼多多PHP SDK:5分钟搞定电商API集成,让开发效率翻倍 [特殊字符]
  • Node-RED Dashboard实战指南:零基础构建专业数据可视化界面
  • 3分钟掌握nodeppt Mermaid插件:让你的演示文稿从此告别图片导入烦恼
  • 5分钟掌握dnd-kit网格对齐:React拖拽开发终极指南
  • 5分钟掌握WheelPicker:Android选择器的终极开发指南
  • ANTLR4 C++ 终极指南:从语法解析到高性能应用开发
  • 突破性音源!洛雪音乐实现全网音乐一键获取
  • BGP、OSPF、EIGRP,哪种协议用在哪?一文全讲透!
  • Google购物广告与自然产品列表如何1+1>2?3个被验证的流量协同策略
  • 写程序的时候必须做的一件事?听歌!!我精选粤语歌曲300首无损音乐,可以听十年了。
  • Vibe Coding 的终极委托:当机器拥有自主规划权,人类的“意图纯粹性”何在?
  • 漫画翻译神器manga-image-translator:哪个版本最适合你?
  • SpringBoot中的命名与开发规范
  • Vue 3 + TypeScript 严格模式下的 Performance.now() 实践:构建高性能前端应用
  • 小红书破百的Blog
  • OpenPose人体姿态估计:从零开始掌握5大核心功能
  • 51CTO学堂-Oracle RAC+DG生产实战(4):Oracle21c RAC DataGuard搭建2+2
  • 探索Lenia:发现连续细胞自动机中的数学生命奇迹
  • 2025网络安全学习路线,非常详细!推荐学习
  • RulersGuides.js:网页设计中的精准布局神器
  • 一体式伺服电机在自动咖啡机中的应用案例
  • 对比测试:VMware正版授权vs破解版的真实成本
  • 240亿参数改写中小企业AI规则:Magistral Small 1.2多模态本地化部署革命
  • Java面试题库及答案解析(2026版)
  • Forrester发布流式数据平台报告:Ververica首次跻身领导者行列,实时AI能力获权威认可
  • Wan2.2-T2V-A14B在军事推演沙盘动画中的战术表达潜力
  • 81698A 可调激光器模块
  • AI日报 - 2025年12月11日