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 9:48:27

Mindyolo030如何做对抗训练

问题描述Mindyolo030可以做对抗训练吗&#xff1f;问题解答MindYOLO主要聚焦于YOLO系列算法的标准化实现&#xff08;如YOLOv3/v4/v5/v7/v8/X等&#xff09;&#xff0c;其核心功能集中在模型训练、推理、数据增强和优化器配置&#xff0c;但未在官方配置示例或文档中直接集成对…

作者头像 李华
网站建设 2026/6/10 11:04:38

计数if|

lc25931.mask ll也会溢出 转vec bool2.sort pii(nums,idx) 后标记自身 &#xff06;左右一次遍历即可class Solution { typedef long long ll; public:long long findScore(vector<int>& nums) {ll ret 0;int n nums.size();if (n 1) return nums[0];vector<bo…

作者头像 李华
网站建设 2026/6/10 12:46:07

不用盯电脑!小红书多号定时发布 + 数据聚合攻略

“A号笔记刚编完&#xff0c;切B号时退错账号&#xff1b;盯C号数据入神&#xff0c;漏了D号私信&#xff1b;凌晨爬起来掐高峰发笔记&#xff0c;结果还发错号……” 这是小红书多号运营者的日常&#xff1a;多号布局本想放大收益&#xff0c;却一半精力耗在切号、查数据、盯…

作者头像 李华
网站建设 2026/6/10 13:07:11

PyMC终极指南:贝叶斯建模从入门到实战

PyMC终极指南&#xff1a;贝叶斯建模从入门到实战 【免费下载链接】pymc Python 中的贝叶斯建模和概率编程。 项目地址: https://gitcode.com/GitHub_Trending/py/pymc 还在为传统统计方法无法量化不确定性而困扰吗&#xff1f;想要通过概率编程轻松构建贝叶斯模型吗&am…

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

你的接口很好,但在使用者眼里,它可能只是个打不开的黑盒

有过"考古式开发"的经历吗&#xff1f;你接手了一个离职同事留下的老项目&#xff0c;或者在一个庞大的微服务群里找到了一个看似完美契合需求的内部接口。你满怀期待地点击文档链接&#xff0c;结果页面上只有冷冷清清的一行字&#xff1a;TODO: 待补充。你只能咬着…

作者头像 李华
网站建设 2026/6/10 9:56:40

BUYCOIN:当社区开始争夺交易时代的主导权

在加密行业里&#xff0c;有些创新依靠功能升级&#xff0c;有些依靠技术突破&#xff0c;而极少数会直接改变行业的权力结构。前两类会变成产品&#xff0c;后一类会变成时代。BUYCOIN 属于第三类。 它没有靠外部热点拉起声量&#xff0c;也不是从叙事中诞生的产物&#xff0c…

作者头像 李华