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
?
答案 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
在您的情况下,PopulationIterator
是std::vector<int>::iterator
,它实际上是 LegacyForwardIterator (实际上是 LegacyRandomAccessIterator ),因此,是的,output
中的元素应该与input
中的元素相同。