如何对std::map中的所有值求和

How to sum all values in the std::map?

本文关键字:求和 map std      更新时间:2023-10-16

如何在不使用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。但是它很可能在幕后使用循环