Прежде всего, вам не нужно boost :: multi_index для решения этой проблемы.Просто перегрузите оператор <для вашего типа MapNode и используйте std :: set (соответственно std :: map, если может быть несколько узлов с одинаковыми координатами).Therby, оператор <сначала сравнивает (например) значения x.Если они равны, продолжайте сравнивать координату y. </p>
Существует только одна причина для использования boost :: multi_index: если требуются разные методы доступа.Например, если вам нужно дополнительное «представление», где узлы сначала сортируются по y, а затем по x.Однако подход multi_index для членов (как в вашем коде выше) не очень хорошая идея.Используйте идентичность дважды, но предоставьте две разные функции сравнения.Подробности можно найти в расширенном документе.
Наконец, все эти подходы могут быть не самыми лучшими - в зависимости от вашего приложения.Специализированные структуры данных описаны, например, в книге «Вычислительная геометрия» Берга и др.и др.К сожалению, я не знаю ни одной бесплатной реализации этих алгоритмов ...