std::sample
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <algorithm> で定義
|
||
template< class PopulationIterator, class SampleIterator, class Distance, class URBG > SampleIterator sample( PopulationIterator first, PopulationIterator last, SampleIterator out, Distance n, URBG&& g); |
(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) |
指定範囲の要素をランダムに並べ替えます (関数テンプレート) |