Как найти и обновить одну вложенную структуру в векторе в C ++ 11 - PullRequest
0 голосов
/ 19 октября 2018

У меня есть требование выяснить, существует ли структура с вектором, который содержит вложенную структуру:

#include <iostream>
#include <algorithm>
#include <vector>

typedef struct Obj {
    int id[128];
    int len;
} ID;

typedef struct Details {
    ID id;
    int fwid;
    int respfmt;
} IDDetails;

std::vector<IDDetails> details =
{
   { { { 2, 2, 1 }, 3 }, 0, 1 },
   { { { 2, 2, 2 }, 3 }, 0, 2 }
};

class A {
public:
    int SetDetails(std::vector<IDDetails>& ids, ID &id)
    {}
};

int main()
{
    A a;
    ID d = { { 2, 2, 1 }, 3 };
    a.SetDetails(details, d);
    return 0;
}

Единственная логика, которую я имею в SetDetails , - это пройти через вектор изатем проверьте его детали, но есть ли лучший способ точно сопоставить и обновить эту структуру в векторе?

1 Ответ

0 голосов
/ 19 октября 2018
#include <cstring>
#include <algorithm>

// ...

bool operator==(ID const &lhs, ID const &rhs)
{
    return lhs.len == rhs.len && std::memcmp(lhs.id, rhs.id, lhs.len) == 0;
}

// ...

auto f = std::find_if(ids.begin(), ids.end(), [&](IDDetails const &i) { return i.id == id; });

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...