目前正在通过有效的 STL 工作。第 5 项建议使用范围成员函数通常比使用它们的单元素对应物更可取。我目前希望将地图中的所有值(即 - 我不需要键)复制到向量中。
最干净的方法是什么?
原文由 Gilad Naor 发布,翻译遵循 CC BY-SA 4.0 许可协议
目前正在通过有效的 STL 工作。第 5 项建议使用范围成员函数通常比使用它们的单元素对应物更可取。我目前希望将地图中的所有值(即 - 我不需要键)复制到向量中。
最干净的方法是什么?
原文由 Gilad Naor 发布,翻译遵循 CC BY-SA 4.0 许可协议
其他答案提到 std::transform ,从语义上讲这是正确的选择。但实际上 std::accumulate 可能更适合这项任务,因为:
示例(使用 C++17 语法):
#include <numeric> // for std::accumulate. Note that it's not in <algorithm> where std::transform is located, thanks to Anton Krug for pointing this out
auto map = std::map<int,bool>{};
map[0]=true;
map[1]=false;
const auto mapValues = std::accumulate(map.begin(), map.end(), std::vector<bool>(map.size()), [](auto& vector, const auto& mapEntry) {
vector.push_back(mapEntry.second);
return vector;
});
原文由 Michael D. 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答3.3k 阅读
您不能在这里轻松地使用范围,因为您从映射中获得的迭代器指的是 std::pair,您将用于插入向量中的迭代器指的是存储在向量中的类型的对象,即(如果您要丢弃密钥)不是一对。
我真的不认为它比显而易见的更干净:
如果我要多次使用它,我可能会将其重写为模板函数。就像是: