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

时间:2019-02-20 04:06:26

标签: c++ algorithm random c++17

sshg3 user@host -B dir -B ipconfig -B etc.cmd的输出顺序是否遵循输入顺序的顺序?

例如,

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

3 个答案:

答案 0 :(得分:1)

来自std::sample

  

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

答案 1 :(得分:1)

std::sample上的引用指出:

  

仅当 PopulationIterator 满足 LegacyForwardIterator

的要求时,算法才稳定(保留所选元素的相对顺序)。

PopulationIterator 在这里是std::vector的迭代器。 std::vector的迭代器是LegacyRandomAccessIterator的类型,它满足LegacyBidirectionalIterator的类型,而LegacyForwardIterator的类型又满足{{3}}的类型。

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

答案 2 :(得分:0)

根据https://en.cppreference.com/w/cpp/algorithm/sample

  

仅当PopulationIterator满足 LegacyForwardIterator

的要求时,算法才稳定(保留所选元素的相对顺序)

在您的情况下,PopulationIteratorstd::vector<int>::iterator,它实际上是 LegacyForwardIterator (实际上是 LegacyRandomAccessIterator ),因此,是的,output中的元素应该与input中的元素相同。