2

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

我只想在不影响多重集的情况下对前 N 个元素求和。

4

2 回答 2

6

我只想在不影响多重集的情况下对前 N 个元素求和。

#include <numeric>
#include <iterator>

// ...

int sum = std::accumulate(my_set.begin(), std::next(my_set.begin(), N));

std::next是 C++11 库的补充。这是旧编译器的解决方案:

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

两种解决方案都对多重集进行了两次迭代。如果要防止这种情况,请使用手动循环:

int sum = 0;
std::multiset<int>::iterator it = my_set.begin();
for (int i = 0; i < N; ++i)
{
    sum += *it++;
}
于 2012-01-22T10:27:02.450 回答
2

您可以像在任何其他容器上一样进行迭代multiset,并在看到n元素后停止。

于 2012-01-22T10:23:38.877 回答