operator <
является слишком сложным, и я не проверял, следует ли он строгому слабому порядку.
Сказав это, operator <
можно переписать для проведения лексикографического сравнения с использованием кортежей: использование std::tie
:
#include <tuple>
//…
friend bool operator<(coor const& m, coor const& n)
{
return std::tie(m.pageNo, m.p.x, m.p.y) < std::tie(n.pageNo, n.p.x, n.p.y)
}
Сначала будет выполнено сравнение pageNo, затем x
, а затем y
членов. Это будет гарантировать, что существует строгий слабый порядок для std::set
для данных.
Обратите внимание, что должно быть достаточно компонентов для проверки, чтобы гарантировать уникальность, если вы хотите поместить все элементы в std::set
. Если для сравнения требуется go глубже, чем только эти 3 элемента, просто разверните std::tie
, чтобы включить тест для новых компонентов.