我正在尝试找到一个特定的结构成员,该成员是使用 lambda 函数的结构向量

I am trying to find a specific struct member which a vector of structs using a lambda function

本文关键字:成员 结构 向量 函数 lambda 一个      更新时间:2023-10-16

>我得到了以下结构。我有一个 tps 的向量。

struct tp{
unsigned int channel;
unsigned int tstart;
unsigned int tspan;
unsigned int adcsum;
unsigned int adcpeak;
unsigned int flags;
};

我无法修改结构或向其添加运算符。我有一个特定 tstart 的向量 (all_candidates(,我需要在 tps 的向量上寻找它。

std::vector< TP> Tps; //these are the input TPs.
std::vector< std::pair<double,double> > all_candidates;//every element is a time-tstart from a TP.
const auto& tmp1 = &(all_candidates.at[0].first);
auto first_tp = std::find_if(candidates.begin(),candidates.end(),[&tmp1](const TP& tp_1){return tp_1.first_time == tmp1 ;});

但是当我运行这段代码时,我得到一个编译错误,第一个是:

error: reference to non-static member function must be called
const auto& tmp1 = all_candidates.at[0].first; 

找到给定的 TP 的正确语法是什么? 谢谢

正如错误告诉您的那样,该行

const auto& tmp1 = &(all_candidates.at[0].first);

是问题所在。正如阿尔吉尔达斯·普雷季乌斯所指出的,它应该是all_candidates.at(0)的。此外,第二个&是多余的,被解释为地址运算符。该行应为:

const auto& tmp1 = all_candidates.at(0).first;

但是,由于tstart是一个简单的int,这里不需要参考。你可以简单地写:

const int tmp1 = all_candidates.at(0).first;

同样,您可以按值捕获tmp1,而不是按 lambda 中的引用捕获。