如何对std::map中的所有值求和
How to sum all values in the std::map?
如何在不使用for循环的情况下将std::map<std::string, size_t>
集合中的所有值相加?映射作为私有成员驻留在类中。累加在公共函数调用中执行。
我不想使用boost或其他第三方
您可以使用lambda和std::accumulate
来完成此操作。注意,您需要一个最新的编译器(至少MSVC 2010, Clang 3.1或GCC 4.6):
#include <numeric>
#include <iostream>
#include <map>
#include <string>
#include <utility>
int main()
{
const std::map<std::string, std::size_t> bla = {{"a", 1}, {"b", 3}};
const std::size_t result = std::accumulate(std::begin(bla), std::end(bla), 0,
[](const std::size_t previous, const std::pair<const std::string, std::size_t>& p)
{ return previous + p.second; });
std::cout << result << "n";
}
如果使用c++ 14,可以通过使用泛型lambda来提高lambda的可读性:
[](const std::size_t previous, const auto& element)
{ return previous + element.second; }
使用std::accumulate。但是它很可能在幕后使用循环
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将重物插入std::map
- 使用通用值初始化 std::map,不重复
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- 求和 int 乘以双倍时的欠/过近似
- C++:当所有条目都保证是唯一时,替代 std::map
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 使用字符数组作为 Map 中的键
- C++如何创建 std::map
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- C++ equivalent to Java Map getOrDefault?
- 递归求和任务的错误答案
- 通过迭代器对map的元素求和
- 如何对std::map中的所有值求和