Итак, у меня есть 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);
}
};
Таким образом, элементы эквивалентны, когда их позиция эквивалентна, а элемент меньше другого, если его объединенный функционал меньше, чем у другого. Сортировка работает, но набор примет два элемента одной позиции.