Выборка - это возвращение некоторого подмножества большей популяции.
Он не предназначен для возврата элементов в случайном порядке или в любом другом порядке. Это может , но это не совсем то, для чего оно существует.
cppreference намекает на порядок в этом утверждении:
Алгоритм стабилен, только если PopulationIterator отвечает требованиям ForwardIterator
«Стабильный» в данном случае означает, что он будет возвращать результаты в том же порядке, что и входные данные, поэтому порядок гарантированно , а не будет случайным с ForwardIterator . По теме: Что такое стабильность в алгоритмах сортировки и почему это важно?
Это также имеет смысл, поскольку, подобно тому, что было отмечено в комментариях, чтобы быть эффективным, вам сначала нужно выяснить, какие элементы выбрать, а затем пройти через итератор и выбрать элементы, так как вы можете итерация только от одного направления к другому. Таким образом, это должно быть тривиально, чтобы держать элементы в том же порядке.
Что касается , когда вы не используете ForwardIterator, он не дает никаких гарантий относительно заказа в ту или иную сторону. Таким образом, даже если это может показаться случайным образом упорядоченным, было бы неразумно полагаться на это, поскольку случайность упорядочения может зависеть от реализации и может иметь или не иметь высокую энтропию .
Если вы хотите случайный заказ, вы должны shuffle it.