news 2026/7/30 21:12:00

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 行为

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/30 18:34:28

47、虚拟环境配置与操作指南

虚拟环境配置与操作指南 1. 引言 在计算机技术的学习和实践中,虚拟环境的配置与操作是一项重要的技能。本文将详细介绍Windows 7和Fedora 13虚拟环境的配置过程,包括磁盘分区、文件下载、用户账户创建等操作,帮助读者搭建适合学习和实验的虚拟环境。 2. Windows 7 虚拟环…

作者头像 李华
网站建设 2026/7/30 9:13:54

小红书多号运营全攻略:1 个系统破解登录 + 引流双重焦虑

多账号运营的“痛点”&#xff0c;你中了几条&#xff1f;1、登录惊魂&#xff1a;多账号来回切换&#xff0c;易被判定“异常登录”&#xff0c;轻则功能受限&#xff0c;重则触发风控&#xff0c;养号成果毁于一旦。2、记忆崩塌&#xff1a;账号间切换频繁&#xff0c;客户需…

作者头像 李华
网站建设 2026/7/28 16:55:31

跨平台兼容技术深度解析:让Windows程序无缝运行在Linux/macOS

在现代多元化的操作系统生态中&#xff0c;如何在Linux或macOS上流畅运行Windows应用程序已成为众多技术用户的迫切需求。Wine作为一款革命性的跨平台兼容层&#xff0c;通过精密的API转换技术完美解决了这一痛点&#xff0c;让你无需安装Windows系统就能原生运行.exe程序&…

作者头像 李华
网站建设 2026/7/27 2:33:22

Live Charts:重新定义 .NET 数据可视化的现代解决方案

Live Charts&#xff1a;重新定义 .NET 数据可视化的现代解决方案 【免费下载链接】Live-Charts 项目地址: https://gitcode.com/gh_mirrors/liv/Live-Charts 你是否曾经在 .NET 项目中为数据可视化而苦恼&#xff1f;面对复杂的图表需求&#xff0c;是否觉得现有工具要…

作者头像 李华
网站建设 2026/7/30 3:29:15

跨越架构鸿沟:PaddleX在苹果M系列芯片上的深度适配指南

跨越架构鸿沟&#xff1a;PaddleX在苹果M系列芯片上的深度适配指南 【免费下载链接】PaddleX All-in-One Development Tool based on PaddlePaddle 项目地址: https://gitcode.com/paddlepaddle/PaddleX 在深度学习开发者的日常工作中&#xff0c;硬件兼容性问题常常成为…

作者头像 李华
网站建设 2026/7/30 14:18:02

如何快速集成跨平台字体:终极Web字体解决方案指南

如何快速集成跨平台字体&#xff1a;终极Web字体解决方案指南 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件&#xff0c;包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 还在为不同设备上字体显示效果不统一而烦恼…

作者头像 李华