Card Random Shuffle.
배열이나 리스트로 묶여 있는 정보를 무작위로 섞어 줄때 주로 사용한다.
주로 vector 에서 사용하는 편.
3번째 인자 값으로 표준 난수 생성 클래스(mt19937) 또는 그와 동일한 구조의 사용자 정의 클래스 객체를 넘겨준다.<
(사용자 정의는 mersenne_twister_engine 참조 하여 작성. 참고: docs.microsoft.com/standard-library=vs-2019)<
template<class RandomIt, class URBG>
//!< RandomIt first : 무작위 셔플할 범위 시작 부분.
//!<RandomIt last : 무작위 셔플할 범위 마지막 부분.
//!< URNG&& g : 표준 난수 생성 클래스.(mt19937 객체).
void shuffle(RandomIt first, RandomIt last, URBG&& g);
C++ 17 이전에는 random_shuffle로 셔플이 가능.
C++ 17 이후에는 shuffle로 셔플이 가능하다. random_shuffle 은 삭제 되었다.
(참고 : en.cppreference.com/w/cpp/algorithm/random_shuffle / cplusplus.com/reference/algorithm/shuffle)
EX )
int nSeedNO = 1;
std::vector<int> vecTest;
vecTest.push_back(1);
vecTest.push_back(2);
vecTest.push_back(3);
vecTest.push_back(4);
vecTest.push_back(5);
vecTest.push_back(6);
vecTest.push_back(7);
vecTest.push_back(8);
vecTest.push_back(9);
#if _HAS_AUTO_PTR_ETC
std::random_shuffle(vecTest.begin(), vecTest.end(), [&nSeedNo](int nIndex) { return nSeedNO % nIndex; });
#else //!< C++ 17
//std::random_device rd;
//std::shuffle(vecTest.begin(), vecTest.end(), default_random_engine(rd()) );
std::shuffle(vecTest.begin(), vecTest.end(), default_random_engine(nSeedNO));
#endif
'[ Programing ] > STL & Booster' 카테고리의 다른 글
C++ stl numeric_limits (0) | 2020.06.10 |
---|---|
C++17. STL variant (0) | 2020.06.08 |
STL find_if 사용법. (0) | 2019.12.10 |
STL 강제 크래쉬. (0) | 2017.10.10 |
mt19937 Random (0) | 2016.06.15 |