Как получить номер индекса по struct id в векторе - PullRequest
0 голосов
/ 28 мая 2020
struct person{
    int p_id;
};
std::vector<person> people;

person tmp_person;
tmp_person.p_id = 1;
people.push_back(tmp_person);


person tmp_person2;
tmp_person2.p_id = 2;
people.push_back(tmp_person2);


person tmp_person3;
tmp_person3.p_id = 3;
people.push_back(tmp_person3);

Как найти порядковый номер вектора людей по идентификатору человека. Например, как я могу получить порядковый номер человека с p_id 2?

Ответы [ 3 ]

1 голос
/ 28 мая 2020

Используйте std::find_if, чтобы найти элемент. Это возвращает элементу итератор. И если вы действительно хотите знать индекс, используйте std:distance:

int id_to_find = 1;

std:size_t found_idx = std::distance(
    std::begin(people),
    std::find_if(std::begin(people), std::end(people),
                [=] (const person& p) { return p.p_id == id_to_find; })
    );

Но вам действительно следует использовать итераторы в C ++, если у вас нет веских причин для использования индексов.

0 голосов
/ 28 мая 2020

Решение с использованием find_if

#include <iostream>     // std::cout
#include <algorithm>    // std::find_if
#include <vector>       // std::vector
int val=2;
struct person{
    int p_id;
};
bool isValue (struct person i) {
  return ((i.p_id)==val);
}

int main () {
  std::vector<struct person> people;

  person tmp_person;
  tmp_person.p_id = 1;
  people.push_back(tmp_person);


  person tmp_person2;
  tmp_person2.p_id = 2;
  people.push_back(tmp_person2);


  person tmp_person3;
  tmp_person3.p_id = 3;
  people.push_back(tmp_person3);

  std::vector<person>::iterator it = std::find_if (people.begin(), people.end(), isValue);
  std::cout << "The index of value is " << it-people.begin() << '\n';


  return 0;
}
0 голосов
/ 28 мая 2020

Найдите в векторе, используя для l oop.

for(int i=0;i<people.size();i++){
    if(people[i].p_id == 2){
        return i
        break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...