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);
How can I find a index number of vector people by the person's id.
For example, how can I get a index number of a person who has p_id 2?
3 Réponses :
for(int i=0;i<people.size();i++){
if(people[i].p_id == 2){
return i
break;
}
}
Utilisez Mais vous devez vraiment utiliser des itérateurs en C ++, sauf si vous avez une bonne raison de vouloir des index. P> P> std :: Find_IF code> à trouver l'élément. Cela renvoie un itérateur à l'élément. Et si vous voulez vraiment connaître l'index use std: distance code> :
solution à l'aide de 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;
}
Std :: Find_IF (Personnes.begin (), Personnes.end (), Isvalue); Code> ne compile pas. isvalue code> n'est pas un prédicat valide ici, il a les mauvais paramètres.
Non! N'utilisez pas global val code>!
Comment devrais-je le faire sans codage dur le Val?
Utilisez une lambda avec capture. Ou créer une structure équivalente.
Est-ce que cela répond à votre question? Indice de retour de la position de la structure dans le vecteur