Daily bit(e) C++. std::sample

Добавлено 1 августа 2023 в 02:50

Daily bit(e) C++ #207, стабильный алгоритм выборки из C++17: std::sample.

Daily bit(e) C++. 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.

Теги

C++ / CppDaily bit(e) C++STL / Standard Template Library / Стандартная библиотека шаблоновПрограммирование

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.