如何从多集结构中获取前N个元素,而不是不断获取第一个(.begin())元素然后将其删除?
我只想在不影响multiset的情况下对前N个元素求和。
答案 0 :(得分:5)
我只想在不影响multiset的情况下对前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++;
}
答案 1 :(得分:1)
您可以像对待任何其他容器一样迭代multiset
,并在看到n
元素后停止。