The Wayback Machine - https://web.archive.org/web/20180601204536/http://ja.cppreference.com:80/w/cpp/algorithm/sample
名前空間
変種
操作

std::sample

提供: cppreference.com
< cpp‎ | algorithm
 
 
アルゴリズムライブラリ
実行ポリシー (C++17)
非変更シーケンス操作
(C++11)(C++11)(C++11)
(C++17)
変更シーケンス操作
未初期化記憶域の操作
分割操作
ソート操作
バイナリサーチ操作
集合操作 (ソート済み範囲用)
ヒープ操作
(C++11)
最小/最大演算
(C++11)
(C++17)
順列
数値演算
C のライブラリ
 
ヘッダ <algorithm> で定義
template<class PopulationIterator, class SampleIterator,

          class Distance, class UniformRandomBitGenerator >
SampleIterator sample( PopulationIterator first, PopulationIterator last,
                       SampleIterator out, Distance n,

                       UniformRandomBitGenerator&& g);
(C++17およびそれ以降)

有り得る標本がそれぞれ等しい出現率を持つように、シーケンス [first; last) から n 個の要素を選択し、それらの選択された要素をイテレータ out に書き込みます。 乱数は乱数ジェネレータ g を使用して生成されます。

n がシーケンス内の要素数より大きい場合は、 last-first 個の要素が選択されます。

このアルゴリズムは、 PopulationIteratorForwardIterator の要件を満たす場合にのみ、安定です。

目次

[編集]引数

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

[編集]関連項目

(C++17以前)(C++11)
指定範囲の要素をランダムに並べ替えます
(関数テンプレート)[edit]
close