📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 330行目: | 330行目: | ||
arr: 1; 2; 3; 4; 5; 6; | arr: 1; 2; 3; 4; 5; 6; | ||
arr: 4; 5; 6; 1; 2; 3; | arr: 4; 5; 6; 1; 2; 3; | ||
<br><br> | |||
== 要素の並べ替え(ランダム) == | |||
std::shuffleを使用して、要素の各順列が等しい確率を持つように、範囲内の要素をランダムに並べ替えることができる。<br> | |||
<br> | |||
この関数は、範囲の開始イテレータと終了イテレータの少なくとも2つの引数が必要である。<br> | |||
また、乱数ジェネレータ関数を表す第3引数を指定することもできる。<br> | |||
<br> | |||
以下の例では、第3引数において、randomヘッダにあるmersenne_twister_engineを使用している。<br> | |||
<syntaxhighlight lang="c++"> | |||
#include <iostream> | |||
#include <iterator> | |||
#include <iomanip> | |||
#include <random> | |||
#include <vector> | |||
int main() | |||
{ | |||
std::vector<int> arr = {1, 2, 3, 4, 5, 6}; | |||
std::cout << std::left << std::setw(10) << "arr: "; | |||
copy(arr.begin(), arr.end(), std::ostream_iterator<int>(std::cout,"; ")); | |||
std::cout << std::endl; | |||
// vecotorの要素をランダムに並べ替える | |||
std::shuffle(arr.begin(), arr.end(), std::mt19937(std::random_device()())); | |||
std::cout << std::left << std::setw(10) << "arr: "; | |||
copy(arr.begin(), arr.end(), std::ostream_iterator<int>(std::cout,"; ")); | |||
std::cout << std::endl; | |||
return EXIT_SUCCESS; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
// 出力例 | |||
arr: 1; 2; 3; 4; 5; 6; | |||
arr: 5; 1; 4; 6; 2; 3; | |||
<br><br> | <br><br> | ||