最初の (.begin()) 要素を常に取得してから消去することなく、マルチセット構造から最初の N 要素を取得するにはどうすればよいですか?
マルチセットに影響を与えずに最初の N 要素を合計したいだけです。
マルチセットに影響を与えずに最初の 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);
どちらのソリューションも、マルチセットを 2 回繰り返します。それを防ぎたい場合は、手動ループを使用してください。
int sum = 0;
std::multiset<int>::iterator it = my_set.begin();
for (int i = 0; i < N; ++i)
{
sum += *it++;
}
他のコンテナと同じように繰り返し処理し、要素multiset
を確認したら停止できます。n