名前空間
変種
操作

std::sample

提供: cppreference.com
< cpp‎ | algorithm
 
 
アルゴリズムライブラリ
実行ポリシー (C++17)
非変更シーケンス操作
(C++11)(C++11)(C++11)
(C++17)
変更シーケンス操作
未初期化記憶域の操作
分割操作
ソート操作
(C++11)
二分探索操作
集合操作 (ソート済み範囲用)
ヒープ操作
(C++11)
最小/最大演算
(C++11)
(C++17)
順列
数値演算
C のライブラリ
 
ヘッダ <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 個の要素が選択されます。

このアルゴリズムは、 PopulationIteratorLegacyForwardIterator の要件を満たす場合にのみ、安定 (選択された要素の相対的な順序が維持される) です。

目次

[編集] 引数

first, last - 標本の作成元 (母集団) の範囲を形成するイテレータの組
out - 標本を書き込む出力イテレータ。 [first;last) の範囲内であってはなりません
n - 作成する標本の数
g - 無作為性の源として使用される乱数ジェネレータ
型の要件
-
PopulationIteratorLegacyInputIterator の要件を満たさなければなりません。
-
SampleIteratorLegacyOutputIterator の要件を満たさなければなりません。
-
PopulationIteratorLegacyForwardIterator を満たさない場合、 SampleIteratorLegacyRandomAccessIterator の要件も満たさなければなりません。
-
PopulationIterator の値型は out に書き込み可能でなければなりません。
-
Distance は整数型でなければなりません。
-
std::remove_reference_t<URBG>UniformRandomBitGenerator の要件を満たさなければならず、その戻り値型は Distance に変換可能でなければなりません。

[編集] 戻り値

最後に出力された標本の後のout のコピー、つまり、標本の範囲の終端を返します。

[編集] 計算量

std::distance(first,last) に比例。

[編集] ノート

この関数は選択標本または保管標本を実装するかもしれません。

[編集]

#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)
指定範囲の要素をランダムに並べ替えます
(関数テンプレート) [edit]