std::sample
提供: cppreference.com
ヘッダ <algorithm> で定義 | ||
template<class PopulationIterator, class SampleIterator, class Distance, class UniformRandomBitGenerator > | (C++17およびそれ以降) | |
有り得る標本がそれぞれ等しい出現率を持つように、シーケンス [first; last) から n
個の要素を選択し、それらの選択された要素をイテレータ out
に書き込みます。 乱数は乱数ジェネレータ g
を使用して生成されます。
n
がシーケンス内の要素数より大きい場合は、 last-first 個の要素が選択されます。
このアルゴリズムは、 PopulationIterator
が ForwardIterator
の要件を満たす場合にのみ、安定です。
目次 |
[編集]引数
first, last | - | 標本の作成元 (母集団) の範囲を形成するイテレータの組 |
out | - | 標本を書き込む出力イテレータ。 [first;last) の範囲内であってはなりません |
n | - | 作成する標本の数 |
g | - | 無作為性の源として使用される乱数ジェネレータ |
型の要件 | ||
-PopulationIterator は InputIterator の要件を満たさなければなりません。 | ||
-SampleIterator は OutputIterator の要件を満たさなければなりません。 | ||
-PopulationIterator が ForwardIterator を満たさない場合、 SampleIterator は RandomAccessIterator の要件も満たさなければなりません。 | ||
-PopulationIterator の値型は out に書き込み可能でなければなりません。 | ||
-Distance は整数型でなければなりません。 | ||
-std::remove_reference_t<UniformRandomBitGenerator> は UniformRandomBitGenerator の要件を満たさなければならず、その戻り値型は Distance に変換可能でなければなりません。 |
[編集]戻り値
最後に出力された標本の後のout
のコピー、つまり、標本の範囲の終端を返します。
[編集]計算量
std::distance(first,last) に比例。
[編集]ノート
この関数は選択標本または保管標本を実装するかもしれません。
[編集]例
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 : cdefg
[編集]関連項目
(C++17以前)(C++11) | 指定範囲の要素をランダムに並べ替えます (関数テンプレート) |