std::sample
提供: cppreference.com
ヘッダ <algorithm> で定義
|
||
template< class PopulationIterator, class SampleIterator, class Distance, class URBG > |
(C++17以上) | |
有り得る標本がそれぞれ等しい出現率を持つように、シーケンス [first; last) から n
個の要素を選択し、それらの選択された要素をイテレータ out
に書き込みます。 乱数は乱数ジェネレータ g
を使用して生成されます。
n
がシーケンス内の要素数より大きい場合は、 last-first 個の要素が選択されます。
このアルゴリズムは、 PopulationIterator
が LegacyForwardIterator の要件を満たす場合にのみ、安定 (選択された要素の相対的な順序が維持される) です。
目次 |
[編集] 引数
first, last | - | 標本の作成元 (母集団) の範囲を形成するイテレータの組 |
out | - | 標本を書き込む出力イテレータ。 [first;last) の範囲内であってはなりません |
n | - | 作成する標本の数 |
g | - | 無作為性の源として使用される乱数ジェネレータ |
型の要件 | ||
-PopulationIterator は LegacyInputIterator の要件を満たさなければなりません。
| ||
-SampleIterator は LegacyOutputIterator の要件を満たさなければなりません。
| ||
-PopulationIterator が LegacyForwardIterator を満たさない場合、 SampleIterator は LegacyRandomAccessIterator の要件も満たさなければなりません。
| ||
-PopulationIterator の値型は out に書き込み可能でなければなりません。
| ||
-Distance は整数型でなければなりません。
| ||
-std::remove_reference_t<URBG> は UniformRandomBitGenerator の要件を満たさなければならず、その戻り値型は Distance に変換可能でなければなりません。
|
[編集] 戻り値
最後に出力された標本の後のout
のコピー、つまり、標本の範囲の終端を返します。
[編集] 計算量
std::distance(first,last) に比例。
[編集] ノート
この関数は選択標本または保管標本を実装するかもしれません。
[編集] 実装例
libstdc++ と libc++ の実装も参照してください。
[編集] 例
Run this code
#include <iostream> #include <random> #include <string> #include <iterator> #include <algorithm> int main() { std::string in = "abcdefgh", out; std::sample(in.begin(), in.end(), std::back_inserter(out), 5, std::mt19937{std::random_device{}()}); std::cout << "five random letters out of " << in << " : " << out << '\n'; }
出力例:
five random letters out of abcdefgh : adfgh
[編集] 関連項目
(C++17未満)(C++11) |
指定範囲の要素をランダムに並べ替えます (関数テンプレート) |