news 2026/6/9 21:25:45

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/10 15:17:56

Tidal音乐下载完全指南:3步实现高品质音乐离线收藏

Tidal音乐下载完全指南&#xff1a;3步实现高品质音乐离线收藏 【免费下载链接】Tidal-Media-Downloader Download TIDAL Music On Windows/Linux/MacOs (PYTHON/C#) 项目地址: https://gitcode.com/gh_mirrors/ti/Tidal-Media-Downloader 还在为Tidal平台上的音乐无法永…

作者头像 李华
网站建设 2026/6/10 15:17:08

如何在Spring Boot项目中实现高效数据翻译框架

如何在Spring Boot项目中实现高效数据翻译框架 【免费下载链接】easy-trans easy-trans是一个数据翻译组件&#xff0c;开发者可以通过一个注解将vo中的id翻译为title、name&#xff1b;可以将字典码sex 1翻译为男/女。支持缓存、微服务等各种各样的有趣玩法。 项目地址: htt…

作者头像 李华
网站建设 2026/6/10 10:32:35

不愧是京东大牛手码的“redis 深度笔记”从基础到源码应有尽有

写在前面 Redis&#xff08;Remote DIctionary Server&#xff09;作为一个开源/C实现/高性能/基于内存的key-value存储系统&#xff0c;相信做Java的小伙伴都不会陌生。Redis常用于缓存、分布式锁、队列(或有序集合)等场景&#xff0c;追求技术的小伙伴们肯定不只满足于Redis…

作者头像 李华
网站建设 2026/6/10 18:45:03

汇川H3U PLC控制走CANLink带触摸屏完整程序实战分享

汇川H3UPLC控制走CANLink带触摸屏完整程序 汇川H3U程序 1.实际工程应用程序&#xff0c;稳定运行&#xff1b; 2.带3个步进电机16个私服一共19个轴&#xff1b; 3.包含系统控制程序&#xff0c;报警程序&#xff0c;气缸操作&#xff0c;当班产能&#xff0c;历史产能&#xff…

作者头像 李华
网站建设 2026/6/10 15:17:39

如何快速搭建专业文件目录网站:Directory Lister完整指南

如何快速搭建专业文件目录网站&#xff1a;Directory Lister完整指南 【免费下载链接】DirectoryLister &#x1f4c2; Directory Lister is the easiest way to expose the contents of any web-accessible folder for browsing and sharing. 项目地址: https://gitcode.com…

作者头像 李华
网站建设 2026/6/9 18:17:05

Wan2.2-T2V-A14B支持多人物角色协同动作生成吗?

Wan2.2-T2V-A14B支持多人物角色协同动作生成吗&#xff1f; 你有没有遇到过这样的场景&#xff1a;想让AI生成一段“两位商务人士在会议室握手”的视频&#xff0c;结果出来的画面要么是两人动作不同步&#xff0c;要么直接穿模、漂移&#xff0c;甚至手都没碰上——尴尬得像在…

作者头像 李华