gpt4 book ai didi

c++11 - 如何从具有 x 属性的向量中随机选择一个项目

转载 作者:行者123 更新时间:2023-12-05 04:25:51 27 4
gpt4 key购买 nike

我正在寻找一种方法来随机选择一个矢量项,其中的特殊属性具有指定值。

举个例子:我有一个来自 struct Student

的向量
struct Student{
string name;
float x;
float y;
bool dropped;
};

std::vector<Student> students;

在这种情况下,选择一个随机项目,其中 dropped 值为 true。

这样做最有效的方法是什么?

最佳答案

您可以创建一个辅助函数,它首先收集与一元谓词匹配的所有元素的迭代器,然后随机选择其中一个元素。

它可能看起来像这样:

#include <random>

std::mt19937& prng() {
static std::mt19937 instance(std::random_device{}());
return instance;
}

template <class It, class UnaryPredicate>
It get_random(It first, It last, UnaryPredicate&& pred) {
std::vector<It> iters; // to store iterators to elements matching pred

for(;first != last; ++first) {
if (pred(*first)) iters.push_back(first); // matching pred, store it
}
if(iters.empty()) return last; // no matching elements

// create a uniform integer distribution for [0, iters.size())
std::uniform_int_distribution<size_t> dist(0, iters.size() - 1);

// select a random iterator and return it:
return iters[dist(prng())];
}

然后它会像这样使用:

auto it = get_random(students.begin(), students.end(),
[](Student& s) { return s.dropped; });

std::cout << "picked " << it->name << '\n';

Demo

关于c++11 - 如何从具有 x 属性的向量中随机选择一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73162377/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com