首页 > 解决方案 > `std::sample()` 的输出序列是否遵循输入序列的顺序?

问题描述

的输出序列是否std::sample()遵循输入序列的顺序?

例如,

const std::vector<int> input{2, 4, 6, 8, 1, 3, 5, 7};
std::vector<int> output;
std::sample(input.begin(), input.end(), std::back_inserter(output), 3, any_urbg);

是否保证output永远不可能[1, 2, 3]

标签: c++algorithmrandomc++17

解决方案


关于std::sample状态的参考:

仅当PopulationIterator满足LegacyForwardIterator的要求时,算法才是稳定的(保留所选元素的相对顺序)

这里的PopulationIterator是 的迭代器std::vector。的迭代器std::vector是一个LegacyRandomAccessIterator ,它满足 LegacyBidirectionalIterator 的类型,后者又满足LegacyForwardIterator的类型。

所以,是的,可以保证输出永远不可能,[1, 2, 3]因为这会违反所选元素的相对顺序,即[2, 1, 3].


推荐阅读