Как использовать std :: find для пользовательского объекта внутри std :: vector? - PullRequest
0 голосов
/ 09 января 2019

Попытка использовать std::find для вектора, который содержит пользовательские объекты но я не могу понять, как использовать это, чтобы выполнить то, что я пытаюсь сделать. Есть ли другой способ сделать это?

struct object
{
    char x;
    int y;
    object(char x, int y)
    {
        this->x = x;
        this->y = y;
    }
};

int main()
{
    std::vector<object> vector;

    object obj = object('X', 0);

    vector.push_back(obj);

    if (std::find(vector.begin(), vector.end(), ? ? ? ) != vector.end())
    {
        //do something
    }

    return 0;
}

Я пытаюсь найти obj.y

1 Ответ

0 голосов
/ 09 января 2019

Алгоритм std::find имеет несколько версий, в некоторых из которых вы можете определить способ сравнения элементов. По умолчанию он просто использует сравнение на равенство ==.

//         v----- found is not a boolean, but an iterator
auto const found = std::find(vector.begin(), vector.end(), element_to_find);

Если равенства недостаточно, вы можете использовать std::find_if, который принимает предикат для сравнения элементов:

auto const predicate = 
    [&](auto const& element) {
        return element.is_the_one(); // element.is_the_one() returns a boolean
                                     // You can use obj.y here
    };

//         v----- found is not a boolean, but an iterator
auto const found = std::find_if(vector.begin(), vector.end(), predicate);

Я бы рекомендовал прочитать документацию, чтобы узнать, как обрабатывать возвращаемое значение, если алгоритм поиска.

...