C++ 랜덤 셔플


C++11부터 shuffle 메소드를 제공한다.

 

Defined in header <algorithm>

template< class RandomIt, class URBG >
void shuffle( RandomIt first, RandomIt last, URBG&& g );

 

사용 조건은 다음과 같다.

  • Random access iterator를 제공해야 한다.
  • URBG(Uniform Random Bit Generator)를 사용해야 한다.
    • std::mt19937
    • 등등 (사실 mt19937 말고는 뭐가 있는지 모르겠다)

 

std::random_shuffle 메소드가 있었지만 C++14부터 deprecated 되었다. random_shuffle의 지원은 C++14까지 된다고 한다. c++17에선 삭제됐다.

 

 

예제는 std::vector를 랜덤 셔플하는 프로그램이다.

#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);
 
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << "\n";
}

 

 

Possible output

8 6 10 4 2 3 7 1 9 5

 

반응형