从结构向量中选择随机结构

时间:2014-10-13 01:28:39

标签: c++ random vector struct

我有一个结构矢量:

struct entries 
{
   double km1, km2, km3;
};

我已将结构存储在向量中。我想从向量中选择2个随机结构并显示随机选择的结构的每个元素:km1,km2,km3

我在stackoverflow上发现了一个类似的问题,但它是一个int的向量,并且由于某种原因没有返回随机结构。感谢

1 个答案:

答案 0 :(得分:1)

选择这两个很容易:

template <typename Iterator, typename Engine>
std::tuple<Iterator, Iterator> pick_two(Iterator begin, Iterator end, Engine & engine)
{
    int size = end - begin;

    if (size < 2) {
        throw std::invalid_argument("Sequence does not contain two elements");
    }

    std::uniform_int_distribution<int> distribution(0, size - 1);

    int first = distribution(engine);
    int second;

    do {
        second = distribution(engine);
    } while (first == second);

    return std::make_tuple(begin + first, begin + second);
}

您可以这样称呼,给定全局std::default_random_engine random_engine;和名为v的向量:

auto choices = pick_two(v.begin(), v.end(), engine);

您可以使用*(std::get<0>(choices))获取第一个struct值,使用*(std::get<1>(choices))获取第二个struct值,并使用您喜欢的任何方法输出值。