벡터를 random_shuffle 시 실행시 마다 똑같은 순서대로 섞는데 이를 랜덤하게 하려면
어떻게 해야 하나요?
김백일님이 쓴 해결책
여기서
random_shuffle(v.begin(), v.end(), RandomFunction()); // 매번 실행 시마다 다르다.
요부분에서 에러가 나오는데... 어떻게 해야할지...
// Example for random_shuffle()
#include<cstdlib>
#include<iostream>
#pragma hdrstop
#include<vector>
#include<iterator>
#include<algorithm>
#include<numeric>
using namespace std;
struct RandomFunction {
RandomFunction() { randomize(); }
int operator() (int X) { return random(X); }
};
int main() {
vector<int> v(12);
iota(v.begin(), v.end(), 0); // 0 1 2 3 4 5 6 7 8 9 10 11
ostream_iterator<int> out(cout, " ");
copy(v.begin(), v.end(), out);
cout << endl;
random_shuffle(v.begin(), v.end()); // 1 5 11 2 6 4 10 8 7 0 9 3 (빌더 6 STLport의 경우)
copy(v.begin(), v.end(), out);
cout << endl;
random_shuffle(v.begin(), v.end(), RandomFunction()); // 매번 실행 시마다 다르다.
copy(v.begin(), v.end(), out);
cout << endl;
return 0;
}
|