std:: sample
|
ヘッダーで定義
<algorithm>
|
||
|
template
<
class
PopulationIt,
class
SampleIt,
class
Distance,
class
URBG
>
SampleIterator sample
(
PopulationIt first, PopulationIt last,
|
(C++17以降) | |
シーケンス
n
個の要素を
[
first
,
last
)
から(非復元抽出で)選択し、可能な全ての標本が等しい確率で現れるようにし、選択された要素を出力イテレータ
out
に書き込みます。乱数は乱数生成器
g
を使用して生成されます。
n がシーケンス内の要素数を超える場合、シーケンス内の全要素を選択します。
このアルゴリズムが安定(選択された要素の相対的な順序を保持する)であるのは、
PopulationIt
が
LegacyForwardIterator
の要件を満たす場合に限ります。
first の値型が (C++20まで) * first の値型が (C++20以降) out に writable でない場合、プログラムは不適格です。
以下のいずれかの条件が満たされる場合、動作は未定義です:
-
out
は
[first,last)の範囲内にあります。 -
PopulationItは LegacyInputIterator の要件を満たしていません。 -
SampleItは LegacyOutputIterator の要件を満たしていません。 - 以下のすべての条件が満たされます:
|
(C++23まで) |
|
(C++23以降) |
-
-
SampleItは LegacyRandomAccessIterator の要件を満たしていません。
-
-
型
Tが std:: remove_reference_t < URBG > として与えられた場合、以下のいずれかの条件が満たされること:
-
-
Tは UniformRandomBitGenerator の要件を満たしていません。
-
|
(C++20以前) |
目次 |
パラメータ
| first, last | - | サンプリングを行う要素の範囲を定義するイテレータのペア(母集団) |
| out | - | サンプルが書き込まれる出力イテレータ |
| n | - | 作成するサンプルの数 |
| g | - | ランダム性のソースとして使用される乱数生成器 |
| 型要件 | ||
-
Distance
は整数型でなければならない。
|
||
戻り値
最後に出力されたサンプルの後、つまりサンプル範囲の終端にある out のコピーを返します。
計算量
std:: distance ( first, last ) の要素数に対して線形。
実装例
実装は libstdc++ 、 libc++ および MSVC STL で参照してください。
注記
この関数は選択サンプリングまたは reservoir sampling を実装する可能性があります。
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_sample
|
201603L
|
(C++17) |
std::sample
|
例
#include <algorithm> #include <iostream> #include <iterator> #include <random> #include <string> int main() { std::string in {"ABCDEFGHIJK"}, out; std::sample(in.begin(), in.end(), std::back_inserter(out), 4, std::mt19937 {std::random_device{}()}); std::cout << "Four random letters out of " << in << " : " << out << '\n'; }
出力例:
Four random letters out of ABCDEFGHIJK: EFGK
関連項目
|
(until C++17)
(C++11)
|
範囲内の要素をランダムに並べ替える
(関数テンプレート) |
|
(C++20)
|
シーケンスからN個のランダムな要素を選択する
(アルゴリズム関数オブジェクト) |