std::experimental::sample
来自 cppreference.com
< cpp | experimental
定义在头文件 <experimental/algorithm> 中 |
||
template< class PopulationIterator, class SampleIterator, class Distance, class URBG > |
(1) | (库基础 TS) |
template< class PopulationIterator, class SampleIterator, class Distance > SampleIterator sample( PopulationIterator first, PopulationIterator last, |
(2) | (库基础 TS v2) |
从序列 [
first,
last)
中选择 n 个元素,使得每个可能的样本都有相同的出现概率,并将这些选定的元素写入输出迭代器 out。
如果 n 大于序列中的元素数量,则选择 last - first 个元素。
只有当 PopulationIterator
满足 LegacyForwardIterator 的要求时,该算法才是稳定的。
1) 使用随机数生成器 g 生成随机数。
2) 使用 每线程引擎 生成随机数。
内容 |
[编辑] 参数
first, last | - | 一对迭代器,形成用于进行采样的范围(总体) |
out | - | 写入样本的输出迭代器。不能在范围 [ first, last) 内 |
n | - | 要进行的采样数量 |
g | - | 用作随机性来源的随机数生成器 |
-PopulationIterator 必须满足 LegacyInputIterator 的要求。 | ||
-SampleIterator 必须满足 LegacyOutputIterator 的要求。 | ||
-如果 PopulationIterator 不满足 LegacyForwardIterator,SampleIterator 还必须满足 LegacyRandomAccessIterator 的要求。 | ||
-PopulationIterator 的值类型必须可以写入 out。 | ||
-Distance 必须是整数类型。 | ||
-URBG 必须满足 UniformRandomBitGenerator 的要求,其返回类型必须可转换为 Distance 。 |
[编辑] 返回值
返回输出最后一个样本的 out 的副本,即样本范围的末尾。
[编辑] 复杂度
对 std::distance(first, last) 线性。
[编辑] 备注
此函数可能实现选择采样或蓄水池采样。
[编辑] 示例
运行此代码
#include <experimental/algorithm> #include <iostream> #include <iterator> #include <random> #include <string> int main() { std::string in = "abcdefgh", out; std::experimental::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
[编辑] 另请参阅
(直到 C++17)(C++11) |
随机重新排序范围内的元素 (函数模板) |