Я пытаюсь найти конкретный член структуры, который вектор структур с использованием лямбда-функции - PullRequest
0 голосов
/ 15 октября 2019

Мне дали следующую структуру. У меня есть вектор ТПС.

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

Я не могу ни изменить структуру, ни добавить к ней оператор. У меня есть вектор (all_candidates) определенных tstarts, который мне нужно искать на векторе 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; 

Каков правильный синтаксис, чтобы найти ТП при старте? Спасибо

1 Ответ

2 голосов
/ 15 октября 2019

Как показывает ошибка, проблема в строке

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 по значению, а не по ссылке в вашей лямбде.

...