Daily bit(e) C++. std::sample
Добавлено 1 августа 2023 в 02:50
Daily bit(e) C++ #207, стабильный алгоритм выборки из C++17: std::sample
.
Алгоритм std::sample
(C++17) – это стабильный (поддерживает относительный порядок элементов) алгоритм выборки, который случайным образом копирует заданное количество элементов из исходного диапазона в целевой диапазон (выходной итератор).
#include <algorithm>
#include <vector>
#include <random>
#include <iterator>
#include <iostream>
int main()
{
std::vector<int> data{1, 2, 3, 4, 5, 6, 7, 8, 9};
std::vector<int> out;
// фиксированное начальное значение для детерминированного результата
auto gen = std::mt19937(1);
std::sample(data.begin(), data.end(), // входной диапазон
std::back_inserter(out), // выходной итератор
4, // количество элементов для выборки
gen); // механизм случайных чисел
for (auto v : out)
std::cout << v << " ";
std::cout << "\n";
// stdlibc++: out == {1, 6, 8, 9}
// libc++: out == {2, 4, 5, 9}
}
Открыть пример на Compiler Explorer.