Поиск значения в наборе с пользовательскими объектами - PullRequest
0 голосов
/ 25 мая 2018

У меня есть класс

class Node{
    int node;
    int g;
    int f;
    int parent;
}

, и я создал набор с членами типа Node

set<Node, MinCost> frontier;

, где MinCost - это класс для Ordering

class MinCost
{
    bool operator()(const Node &x, const Node &y)
    {
        return x.f < y.f;
    }
};

Теперь я знаю, что набор должен иметь уникальные значения.В моем наборе объекты Node уникальны, но переменная, по которой они упорядочены (f), может не быть.

Итак, будет ли поиск объекта работать так, как ожидалось?

Будет frontier.find(Node) вернуть правильное значение?

1 Ответ

0 голосов
/ 25 мая 2018

Я не верю, что это будет работать с std::set.Возможно, вы захотите использовать std::multiset вместо этого и использовать equal_range() для поиска узлов с одинаковой стоимостью.

От cppreference :

Вездестандартная библиотека использует концепцию сравнения, уникальность определяется с помощью отношения эквивалентности.В неточных терминах два объекта a и b считаются эквивалентными, если ни один из них не сравнивается меньше, чем другой:! Comp (a, b) &&! Comp (b, a).

Другими словами, когдаВы говорите, что два объекта Node не равны, это совершенно не имеет отношения к std::set, который определяет равенство только в соответствии с приведенным сравнением.Так что даже вставка в std::set не даст ожидаемого результата.

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