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