Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Generates a random sequence by reordering the values returned from its base engine.
template<class Engine,
    size_t K>
    class shuffle_order_engine {
public:
    typedef Engine base_type;
    typedef typename base_type::result_type result_type;
    static constexpr size_t table_size = K;
    shuffle_order_engine();
    explicit shuffle_order_engine(const base_type& eng);
    explicit shuffle_order_engine(result_type x0);
    explicit shuffle_order_engine(seed_seq& seq);
    void seed();
    void seed(result_type x0);
    void seed(seed_seq& seq);
    const base_type& base() const;
    static constexpr result_type min();
    static constexpr result_type max();
    result_type operator()();
    void discard(unsigned long long count);
private:
    Engine stored_eng;
    result_type stored_arr[K];
    result_type stored_y;
    };
Parameters
Engine
The stored engine type.K
The K engine parameter.
Remarks
This template class describes a compound engine that produces values by reordering the values returned by its base engine. Each constructor fills the array stored_arr with K values returned by the base engine. It then stores in stored_y an additional value returned by the base engine. Each element of the generated sequence is then obtained from stored_y, after which:
The array index J is computed as K * (stored_y - min()) / (max() - min() + 1).
stored_y is replaced by stored_arr[J].
stored_arr[j] is replaced by stored_eng().
The engine's state is the state of stored_eng, followed by the K elements of stored_arr, followed by stored_y.
The value of the template argument K must be greater than zero.
Requirements
Header: <random>
Namespace: std
See Also
Reference
shuffle_order_engine::base_type