Я просто хочу суммировать первые элементы 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++;
}
В нем говорится, что «следующий» не определено, или что-то вроде – Cristy
@Cristy updated – fredoverflow
Я «решил» проблему, вручную перебирая первые N элементов. – Cristy