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