std :: set с пользовательским типом, как обеспечить отсутствие дубликатов

Итак, у меня есть std :: set, который должен сохранять определенный порядок, а также не допускать дублирования определенного пользователем типа. Теперь я могу заставить ордер работать правильно, перегружив & lt; & apos; Оператор в моем типе. Однако набор не обнаруживает должным образом дубликаты, и, честно говоря, я не совсем уверен, как он это делает внутренне. Я перегружен & quot; == & quot; оператор, но почему-то я не уверен, что это то, что набор на самом деле использует? Итак, вопрос в том, как набор определяет дубликаты при добавлении значений? Вот соответствующий код:

Пользовательский тип:

//! An element used in the route calculation.
struct RouteElem {
    int shortestToHere; // Shortest distance from the start.
    int heuristic;      // The heuristic estimate to the goal.
    Coordinate position;
    bool operator<( const RouteElem& other ) const
    {
        return (heuristic+shortestToHere) < (other.heuristic+other.shortestToHere);
    }
    bool operator==( const RouteElem& other ) const
    {
        return (position.x == other.position.x && position.y == other.position.y);
    }
};

Таким образом, элементы эквивалентны, когда их положение эквивалентно, и элемент меньше другого, если его объединенный функционал меньше, чем у другого. Сортировка работает, но набор примет два элемента одной и той же позиции.

Ответы на вопрос(6)

Ваш ответ на вопрос