Итак, у меня есть std:: set, который должен поддерживать определенный порядок, а также не допускать дубликатов определенного пользователем типа (по мне). Теперь я могу заставить порядок работать правильно, перегружая '<' оператор в моем типе. Тем не менее, набор не находит надлежащего обнаружения дубликатов, и, честно говоря, я не совсем уверен, как это делается внутри. Я перегрузил оператор '==', но почему-то не уверен, что это то, что на самом деле использует набор? Итак, вопрос в том, как набор определяет дубликаты при добавлении значений? Вот соответствующий код:
Пользовательский тип:
//! 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);
    }
};
Таким образом, элементы эквивалентны, когда их позиция эквивалентна, а элемент меньше другого, если его объединенный функционал меньше, чем у другого. Сортировка работает, но набор примет два элемента одной позиции.