Получить первые N элементов в мультисете C ++ - PullRequest
2 голосов
/ 22 января 2012

Как я могу получить первые N элементов из структуры мультимножества, не получая постоянно первый элемент (.begin ()), а затем стирая его?

Я просто хочу суммировать первые N элементов, не затрагиваямультимножество.

Ответы [ 2 ]

5 голосов
/ 22 января 2012

Я просто хочу суммировать первые 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 голос
/ 22 января 2012

Вы можете выполнить итерацию по multiset так же, как и по любому другому контейнеру, и остановиться, когда увидите элементы n.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...