ranges::sample

ranges::sample (무작위 표본 추출 — ranges)

범위에서 무작위로 n개의 표본을 뽑아 출력하는 ranges 버전 알고리즘이에요. <algorithm> 헤더에 있어요.

출처: cppreference

본문

std::ranges::sample[first, last)에서 균일하게 n개의 요소를 뽑아 out에 써요.

namespace std::ranges {
template< std::input_iterator I, std::sentinel_for<I> S,
          std::weakly_incrementable O, class Gen >
requires std::forward_iterator<O> && std::indirectly_copyable<I, O> &&
         std::uniform_random_bit_generator<std::remove_reference_t<Gen>>
constexpr sample_result<I, O>
    sample( I first, S last, O out, std::iter_difference_t<I> n, Gen&& gen );
}
  • 반환 타입 sample_result{in, out}.
  • 각 요소가 표본에 포함될 확률이 균등한 무작위 표본을 만들어요.
std::vector<int> v{1,2,3,4,5,6,7,8,9,10};
std::mt19937 rng(42);
std::vector<int> s(3);
std::ranges::sample(v, s.begin(), 3, rng);
// 무작위 3개 표본

전체를 섞지 않고 부분 표본만 균일하게 뽑을 때 유용해요.

더 알아보기 (Learn more)

cppreference