algorithm_shuffle
algorithm_shuffle (무작위 섞기)
std::shuffle는 대상 범위의 요소들을 무작위로 섞어요. 각 순열이 같은 확률로 나타나요. C++11에서 std::random_shuffle을 대체했어요.
출처: cppreference
본문
std::shuffle는 대상 범위 [first, last)의 요소들을 재배열해서 각 가능한 순열이 같은 확률로 나타나게 해요. 난수의 원천은 gen이에요. <algorithm> 헤더에 정의되어 있어요. C++11부터 사용 가능해요.
template< class RandomIt, class URBG >
void shuffle( RandomIt first, RandomIt last, URBG&& gen );
gen은 UniformRandomBitGenerator여야 해요.
이전 C++98의 std::random_shuffle(난수 원천이 std::rand 또는 함수 객체)은 C++17에서 제거됐고, 대신 std::shuffle을 사용해요.
복잡도 (Complexity)
정확히 std::distance(first, last) - 1번의 스왑이 필요해요.
예제 (Example)
#include <algorithm>
#include <iostream>
#include <random>
#include <vector>
int main()
{
std::vector<int> v{1, 2, 3, 4, 5, 6, 7};
std::mt19937 gen(std::random_device{}());
std::shuffle(v.begin(), v.end(), gen);
for (int x : v) std::cout << x << ' ';
std::cout << '\n';
}