std::random_shuffle, std::shuffle
提供: cppreference.com
![]() | このページは、Google 翻訳を使って英語版から機械翻訳されました。 翻訳には誤りや奇妙な言い回しがあるかもしれません。文章の上にポインタをおくと、元の文章が見れます。誤りを修正して翻訳を改善する手助けをしてください。翻訳についての説明は、ここをクリックしてください。 |
ヘッダ <algorithm> で定義 | ||
template<class RandomIt > void random_shuffle( RandomIt first, RandomIt last ); | (1) | |
template<class RandomIt, class RandomFunc > void random_shuffle( RandomIt first, RandomIt last, RandomFunc& r ); | (2) | (C++11以前) (C++11およびそれ以降) |
template<class RandomIt, class URNG > void shuffle( RandomIt first, RandomIt last, URNG&& g ); | (3) | (C++11およびそれ以降) |
与えられた範囲内の要素
[first, last)
それらの要素の各々の可能な順列は、外観の等しい確率を持っていることなどを並べ替える.Original:
Reorders the elements in the given range
[first, last)
such that each possible permutation of those elements has equal probability of appearance.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
1)
乱数発生器は実装定義であるが、関数std::randが用いられることが多い.
Original:
The random number generator is implementation-defined, but the function std::rand is often used.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
2)
乱数ジェネレータは関数オブジェクト
r
です. Original:
The random number generator is the function object
r
. The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
3)
乱数ジェネレータは関数オブジェクト
g
です.Original:
The random number generator is the function object
g
.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
目次 |
[編集]パラメータ
first, last | - | ランダムにシャッフルする要素の範囲 Original: the range of elements to shuffle randomly The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
r | - | iterator_traits<RandomIt>::difference_type として呼び出された場合、区間内r(n) [0〜コンバーチブル型、nのランダムに選択された値を返す関数オブジェクト) Original: function object returning a randomly chosen value of type convertible to iterator_traits<RandomIt>::difference_type in the interval [0,n) if invoked as r(n) The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
g | - | 間隔でタイプ URNG::result_type のランダムに選択された値を返す関数オブジェクト[g.min()、g.max()]g() (例えば<random> から一様乱数発生器のいずれか)として呼び出された場合 Original: function object returning a randomly chosen value of type URNG::result_type in the interval [g.min(), g.max()] if invoked as g() (e.g. any of the uniform random number generators from <random> ) The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
型の要件 | ||
-RandomIt は ValueSwappable および RandomAccessIterator の要件を満たさなければなりません。 | ||
-URNG は UniformRandomNumberGenerator の要件を満たさなければなりません。 |
[編集]値を返します
(なし)
[編集]複雑性
first
last
との間の距離の線形Original:
linear in the distance between
first
and last
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[編集]可能な実装
1つめのバージョン |
---|
template<class RandomIt, class RandomFunc>void random_shuffle(RandomIt first, RandomIt last, RandomFunc&& r){typenamestd::iterator_traits<RandomIt>::difference_type i, n; n = last - first;for(i = n-1; i >0;--i){usingstd::swap; swap(first[i], first[r(i+1)]);}} |
2つめのバージョン |
template<class RandomIt, class UniformRandomNumberGenerator>void shuffle(RandomIt first, RandomIt last, UniformRandomNumberGenerator&& g){typedeftypenamestd::iterator_traits<RandomIt>::difference_type diff_t;typedeftypenamestd::make_unsigned<diff_t>::type udiff_t;typedeftypenamestd::uniform_int_distribution<udiff_t> distr_t;typedeftypename distr_t::param_type param_t; distr_t D; diff_t n = last - first;for(diff_t i = n-1; i >0;--i){usingstd::swap; swap(first[i], first[D(g, param_t(0, i))]);}} |
[編集]例
次のコードは、ランダムに整数1 .. 10を切り直す
Original:
The following code randomly shuffles the integers 1..10:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Run this code
#include <random>#include <algorithm>#include <iterator>#include <iostream> int main(){std::vector<int> v ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; std::random_device rd;std::mt19937 g(rd()); std::shuffle(v.begin(), v.end(), g); copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));std::cout<<"\n";}
可能な出力:
Original:
Possible output:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
8 6 10 4 2 3 7 1 9 5
[編集]参照
指定範囲の要素より辞書的に大きな次の順列を生成します (関数テンプレート) | |
指定範囲の要素より辞書的に小さな次の順列を生成します (関数テンプレート) |