std::sample
| 헤더 <algorithm>
|
||
template< class PopulationIt, class SampleIt, class Distance, class URBG >
SampleIterator sample( PopulationIt first, PopulationIt last,
SampleIt out, Distance n, URBG&& g );
|
에 정의됨 (C++17부터) | |
시퀀스 n 에서 [first, last) 개의 요소를 (비복원으로) 선택하여 각각의 가능한 표본이 동일한 확률로 나타나도록 하고, 선택된 요소들을 출력 반복자 out 에 씁니다. 난수는 난수 생성기 g 을 사용하여 생성됩니다.
만약 n 이 시퀀스의 요소 수보다 크면, 시퀀스의 모든 요소를 선택합니다.
알고리즘은 PopulationIt 이 LegacyForwardIterator 의 요구사항을 충족하는 경우에만 안정적입니다 (선택된 요소의 상대적 순서를 유지).
만약 first 의 값 타입이(until C++20)*first(since C++20) writable to out 가 아니라면, 프로그램의 형식이 잘못되었습니다.
다음 조건 중 하나라도 만족하면, 동작은 정의되지 않습니다:
out이[first,last)안에 있습니다.PopulationIt이 LegacyInputIterator 의 요구사항을 충족하지 않습니다.SampleIt이 LegacyOutputIterator 의 요구사항을 충족하지 않습니다.- 다음 모든 조건이 만족됩니다:
|
(C++23까지) |
|
(C++23부터) |
SampleIt이 LegacyRandomAccessIterator 의 요구사항을 충족하지 않습니다.
- 타입
T을std::remove_reference_t<URBG>로 했을 때, 다음 조건 중 하나라도 만족합니다:
T이 UniformRandomBitGenerator 의 요구사항을 충족하지 않습니다.
|
(C++20까지) |
매개변수
| first, last | - | 샘플링을 수행할 요소들의 범위 를 정의하는 반복자 쌍 (모집단) |
| out | - | 샘플들이 기록될 출력 반복자 |
| n | - | 생성할 샘플의 개수 |
| g | - | 무작위성의 원천으로 사용되는 난수 생성기 |
| 타입 요구사항 | ||
-
Distance
는 정수 타입이어야 합니다.
|
||
반환값
마지막으로 출력된 샘플 이후, 즉 샘플 범위의 끝에 있는 out 의 복사본을 반환합니다.
복잡도
선형 시간 복잡도를 가지며 std:: distance ( first, last ) 에 비례합니다.
가능한 구현
구현체는 libstdc++ , libc++ 및 MSVC STL 에서 확인하십시오.
참고 사항
이 함수는 선택 샘플링(selection sampling) 또는 reservoir sampling 을 구현할 수 있습니다.
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_sample
|
201603L
|
(C++17) |
std::sample
|
예제
#include <algorithm> #include <iostream> #include <iterator> #include <random> #include <string> int main() { std::string in {"ABCDEFGHIJK"}, out; std::sample(in.begin(), in.end(), std::back_inserter(out), 4, std::mt19937 {std::random_device{}()}); std::cout << "Four random letters out of " << in << " : " << out << '\n'; }
가능한 출력:
Four random letters out of ABCDEFGHIJK: EFGK
참고 항목
(C++17까지)(C++11) |
범위 내 요소들을 무작위로 재배열 (함수 템플릿& 알고리즘 함수 객체) |
(C++20) |
|
(C++20) |
시퀀스에서 N개의 무작위 요소를 선택 (알고리즘 함수 객체) |