std::experimental:: sample
|
定义于头文件
<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
要求时保持稳定性。
目录 |
参数
| 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
另请参阅
|
(until C++17)
(C++11)
|
随机重排范围内的元素
(函数模板) |