news 2026/6/22 22:53:11

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/6/22 17:30:04

typing和dataclass

typing模块里常用的类型注解工具&#xff0c;和 Python 3.9 原生类型的对应关系及用法如下&#xff0c;刚好能匹配你之前的答题系统场景&#xff1a;typing 类型Python 3.9 原生写法作用说明示例List[T]list[T]标注元素类型为 T 的列表answers: list[SingleAnswer]Dict[K, V]di…

作者头像 李华
网站建设 2026/6/22 22:07:15

MindSpore网络编译问题BuildModel error 134

问题描述MindSpore 2.2.10Ascend 910环境&#xff0c;同一份网络定义在GPU侧能完整跑通&#xff0c;切到Ascend后端就卡在GraphCompile阶段&#xff0c;日志只吐一行“BuildModel error 134”&#xff0c;把MS_SUBMODULE_LOG_v调到DEBUG、export GLOG_v3、打开DUMP_GE_GRAPH、D…

作者头像 李华
网站建设 2026/6/14 7:24:40

Node-RED Dashboard实战指南:零基础构建专业数据可视化界面

还在为复杂的数据可视化工具而头疼吗&#xff1f;Node-RED Dashboard为您提供了一条从零开始构建专业级仪表板的捷径。这个基于Node-RED的可视化工具包让数据展示变得前所未有的简单直观&#xff0c;无论您是物联网开发者还是数据分析师&#xff0c;都能快速上手。 【免费下载链…

作者头像 李华
网站建设 2026/6/23 3:04:59

5分钟掌握dnd-kit网格对齐:React拖拽开发终极指南

5分钟掌握dnd-kit网格对齐&#xff1a;React拖拽开发终极指南 【免费下载链接】dnd-kit The modern, lightweight, performant, accessible and extensible drag & drop toolkit for React. 项目地址: https://gitcode.com/gh_mirrors/dn/dnd-kit 在现代Web应用开发…

作者头像 李华