2

最初の (.begin()) 要素を常に取得してから消去することなく、マルチセット構造から最初の N 要素を取得するにはどうすればよいですか?

マルチセットに影響を与えずに最初の N 要素を合計したいだけです。

4

2 に答える 2

6

マルチセットに影響を与えずに最初の N 要素を合計したいだけです。

#include <numeric>
#include <iterator>

// ...

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

std::nextC++11 ライブラリの追加です。古いコンパイラの解決策は次のとおりです。

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

どちらのソリューションも、マルチセットを 2 回繰り返します。それを防ぎたい場合は、手動ループを使用してください。

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 に答える