在C++多集中获取前N个元素

Cri*_*sty 2 c++ multiset

如何从多集结构中获取前N个元素,而不是不断获取第一个(.begin())元素然后擦除它?

我只是想在不影响multiset的情况下对前N个元素求和.

fre*_*low 5

我只是想在不影响multiset的情况下对前N个元素求和.

#include <numeric>
#include <iterator>

// ...

int sum = std::accumulate(my_set.begin(), std::next(my_set.begin(), N));
Run Code Online (Sandbox Code Playgroud)

std::next是一个C++ 11库添加.这是旧编译器的解决方案:

std::multiset<int>::iterator it = my_set.begin();
std::advance(it, N);
int sum = std::accumulate(my_set.begin(), it);
Run Code Online (Sandbox Code Playgroud)

两种解决方案都在多重迭代中迭代两次.如果要防止这种情况,请使用手动循环:

int sum = 0;
std::multiset<int>::iterator it = my_set.begin();
for (int i = 0; i < N; ++i)
{
    sum += *it++;
}
Run Code Online (Sandbox Code Playgroud)