std::sample
来自cppreference.com
                    
                                        
                    
                    
                                                            
                    | 定义于头文件  <algorithm> | ||
| template< class PopulationIterator, class SampleIterator,           class Distance, class UniformRandomBitGenerator > | (C++17 起) | |
从序列 [first; last) 选择 n 个元素,使得每个样本拥有相等的出现概率,并写入这些被选择元素到输出迭代器 out 。用随机数生成器 g 生成随机数。
若 n 大于序列中的元素数量,则选择 last-first 个元素。
算法仅若 PopulationIterator 满足向前迭代器 (ForwardIterator) 要求才稳定。
| 目录 | 
[编辑] 参数
| first, last | - | 一对组成自其采样的范围(总体)的迭代器 | 
| out | - | 写入样本的输出迭代器。必须不在 [first;last) 范围 | 
| n | - | 要抽取的样本数 | 
| g | - | 用作随机源的随机数生成器 | 
| - PopulationIterator必须满足 InputIterator的要求。 | ||
| - SampleIterator必须满足 OutputIterator的要求。 | ||
| -若 PopulationIterator不满足向前迭代器 (ForwardIterator) ,则SampleIterator还必须满足随机访问迭代器 (RandomAccessIterator) 的要求 | ||
| - PopulationIterator的 value_type 必须可写入到out | ||
| - Distance必须是整数类型 | ||
| -std::remove_reference_t<UniformRandomBitGenerator> 必须满足均匀随机位生成器 ( UniformRandomBitGenerator) ,且其返回类型必须可转换为Distance | ||
[编辑] 返回值
在输出最后样本后返回 out 的副本,即采样范围的结尾。
[编辑] 复杂度
与 std::distance(first,last) 成线性
[编辑] 注意
此函数可以实现选择抽样或蓄水池抽样。
[编辑] 示例
运行此代码
#include <iostream> #include <random> #include <string> #include <iterator> #include <algorithm> int main() { std::string in = "abcdefgh", out; std::sample(in.begin(), in.end(), std::back_inserter(out), 5, std::mt19937{std::random_device{}()}); std::cout << "five random letters out of " << in << " : " << out << '\n'; }
可能的输出:
five random letters out of abcdefgh : cdefg
[编辑] 参阅
| 将范围内的元素随机重新排序 (函数模板) | 


