0
votes

Comment obtenir un numéro d'index par la structure ID en vecteur

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?

1 commentaires

3 Réponses :


0
votes

recherche forte> dans le vecteur en utilisant pour la boucle forte>.

for(int i=0;i<people.size();i++){
    if(people[i].p_id == 2){
        return i
        break;
    }
}


0 commentaires

1
votes

Utilisez std :: Find_IF à trouver l'élément. Cela renvoie un itérateur à l'élément. Et si vous voulez vraiment connaître l'index use std: distance : xxx

Mais vous devez vraiment utiliser des itérateurs en C ++, sauf si vous avez une bonne raison de vouloir des index.


0 commentaires

0
votes

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;
}


4 commentaires

Std :: Find_IF (Personnes.begin (), Personnes.end (), Isvalue); ne compile pas. isvalue n'est pas un prédicat valide ici, il a les mauvais paramètres.


Non! N'utilisez pas global val !


Comment devrais-je le faire sans codage dur le Val?


Utilisez une lambda avec capture. Ou créer une structure équivalente.