回答編集履歴
1
サンプルコードを追加
test
CHANGED
@@ -1 +1,87 @@
|
|
1
1
|
10個の要素から3個を取り出すでいいのですよね?それなら、[std::shuffle](http://cpprefjp.github.io/reference/algorithm/shuffle.html)を使ってランダムに並び替えして、最初の3個を取るのが実装が一番簡単だと思います。(ただし、最速ではありません)
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
参考までに作りました。C++11で作成していますので、clang++でコンパイルするときは"-std=c++11"や"-std=c++14"を付けて下さい。
|
6
|
+
|
7
|
+
```C++
|
8
|
+
|
9
|
+
#include <algorithm>
|
10
|
+
|
11
|
+
#include <iostream>
|
12
|
+
|
13
|
+
#include <random>
|
14
|
+
|
15
|
+
#include <string>
|
16
|
+
|
17
|
+
#include <vector>
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
int main()
|
22
|
+
|
23
|
+
{
|
24
|
+
|
25
|
+
// シード値には非決定的な random_device を用います。
|
26
|
+
|
27
|
+
// random_device は極めて低速ですが、予測は不可能な乱数です。
|
28
|
+
|
29
|
+
std::random_device seed;
|
30
|
+
|
31
|
+
// 乱数には優秀なメルセンヌツイスター mt19937 を用います。
|
32
|
+
|
33
|
+
// C++11以上では、特殊な事情が無い限り、メルセンヌツイスターを
|
34
|
+
|
35
|
+
// 使用して下さい。
|
36
|
+
|
37
|
+
std::mt19937 engine(seed());
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
// 文字列は string を、リストは vector を用います。
|
42
|
+
|
43
|
+
// C++11 からは初期化子リストが使えます。
|
44
|
+
|
45
|
+
std::vector<std::string> moji = {"moji-retsu0", "moji-retsu1",
|
46
|
+
|
47
|
+
"moji-retsu2", "moji-retsu3", "moji-retsu4",
|
48
|
+
|
49
|
+
"moji-retsu5", "moji-retsu6", "moji-retsu7",
|
50
|
+
|
51
|
+
"moji-retsu8", "moji-retsu9"};
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
// 一様な分布は uniform_int_distribution を使います。
|
56
|
+
|
57
|
+
std::uniform_int_distribution<int> dist(0, moji.size() - 1);
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
// あとは dist(engine) で 1 から mojiにある個数-1 までの乱数を求めて、
|
62
|
+
|
63
|
+
// その位置にある要素を取り出します。
|
64
|
+
|
65
|
+
std::cout << moji.at(dist(engine)) << "x" << moji.at(dist(engine))
|
66
|
+
|
67
|
+
<< "x" << moji.at(dist(engine)) << std::endl;
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
// 重複したくない場合は、リストを shuffle します。
|
72
|
+
|
73
|
+
std::shuffle(moji.begin(), moji.end(), engine);
|
74
|
+
|
75
|
+
// はじめの三つだけ取り出します。
|
76
|
+
|
77
|
+
std::cout << moji.at(0) << "x" << moji.at(1) << "x" << moji.at(2)
|
78
|
+
|
79
|
+
<< std::endl;
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
return 0;
|
84
|
+
|
85
|
+
}
|
86
|
+
|
87
|
+
```
|