indexOf po wektorze struktur.

0

Mam wektor struktur i chciałbym przeszukiwać go tylko wg jednego pola, np.:

 struct user{
    int id;
    QString name;
    QString last_name;
    int age;
};
QVector<user> users;

Gdyby to był QVector np. samych QStringów, to nie było by problemu: int n = users.indexOf("Adam");.
Problem w tym, że nie wiem jak się dostać do pola np. name.
Głowię się już z godzinę i już mi się pomysły kończą.

0

Proszę, u mnie działa : )

     struct user{
       int id;
       QString name;
       QString last_name;
       int age;
   };
   QVector<user> users;

   user u0;
   u0.age = 10;
   u0.id = 1;
   u0.last_name="nowak";
   u0.name="adam";

   users.append(u0);

   qDebug() << users[0].age;

0

Ale to nie rozwiązuje mojego problemu :(
Ty pokazujesz tylko [0] element wektora.
Funkcji IndexOf() muszę podać cały kontener ze wskazaniem na jedno pole struktury), a nie tylko jeden element.

1
#include <algorithm>
// ...
auto it = std::find_if(users.begin(), users.end(), [](auto const& elem){ return elem.name == "Adam"; });
if(it == users.end()) {
    log() << "user 'Adam' not found.";
    return;
}
user& u = *it;
0

Wprawdzie nie jest to odpowiedź na moje pytanie, ale rozwiązuje mój problem :)
To jest jeszcze tylko dodam dla potomnych, bo też się trochę tego naszukałem, że użycie zmiennej zamiast "Adam" wyglądało by tak:

 #include <algorithm>
// ...
QString name = "Adam";
auto it = std::find_if(users.begin(), users.end(), [&](auto const& elem){ return elem.name == name; });
if(it == users.end()) {
    log() << "user 'Adam' not found.";
    return;
}
user& u = *it;

1 użytkowników online, w tym zalogowanych: 0, gości: 1