gpt4 book ai didi

c++ - 从基于两个变量的结构 vector 中获取 min_element

转载 作者:行者123 更新时间:2023-11-30 01:34:59 34 4
gpt4 key购买 nike

所以我有一个按以下方式定义和使用的结构 vector :

enum ID {
alpha,
beta,
gamma
};

using TimePoint = std::chrono::time_point<std::chrono::system_clock>;

typedef struct pInfo {
int bar;
int key;
ID id;
TimePoint tPoint;
} pInfo;

std::vector<pInfo> pMembers;

我想在用所有项填充该 vector 并获取对满足我的条件的匹配元素的引用后基本上遍历该 vector 。

标准是我将有一个函数,该函数传入一种 ID,它将返回对最适合的 vector 元素的引用,这意味着具有最低 TimePoint 的元素.

因此作为引用,该函数类似于:pInfo& getNext(ID p_id);

如果我有一个 vector ,每个 vector 都有一些元素,比如 4 alpha、4 gamma、4 beta 我想要函数只检查具有 ID == alpha 的那些,如果这是我传入的。

现在我正在使用这样的东西:

std::min_element(std::begin(pMembers), std::end(pMembers), [](auto&& lhs, auto&& rhs){return lhs.tPoint < rhs.tPoint};

但这并不能说明我只想获取某些类型。

我该如何做这样的事情?

最佳答案

我只是将具有不同 ID 的对象存储在不同的 vector 中,每个 ID 一个 vector :

std::map<ID, std::vector<pInfo>> pMembers;

如果您不能或不愿这样做,那么我会使用过滤迭代器适配器。下面的例子使用了 Boost.Iterator:

auto const filter = [p_id](auto const& id) { return id == p_id; };
auto const compare = [](auto const& a, auto const& b) { return a.tPoint < b.tPoint; };

auto const it = std::min_element(boost::make_filter_iterator(filter, begin(pMembers), end(pMembers)),
boost::make_filter_iterator(filter, end(pMembers), end(pMembers)),
compare).base();

扩展 Remy 的回答,这就是我将如何编写他们的第一种方法:

auto const it = std::min_element(begin(pMembers), end(pMembers), [=](auto const& a, auto const& b)
{
return std::forward_as_tuple(a.id != p_id, a.tPoint)
< std::forward_as_tuple(b.id != p_id, b.tPoint);
});

关于c++ - 从基于两个变量的结构 vector 中获取 min_element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55089922/

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