Мне нужно использовать структуру карты, которая принимает пары координат Меркатора (пользовательская структура с двумя двойными элементами, один для широты и один для долготы) в качестве ключевого типа.
Проблема в том, что координаты не всегда идеально равны, и нет простого способа исправить входные данные. Тем не менее, мне нужно найти даже близкие совпадения, скажем, в пределах одного метра друг от друга.
Координаты, которые относятся к двум различным точкам, практически никогда не находятся ближе друг к другу, чем этот порог, поэтому непреднамеренное объединение двух точек вместе не является проблемой, о которой нам нужно беспокоиться на практике.
Один подход, который я рассмотрел, — это округление координат до желаемого разрешения перед их сохранением и перед поиском. Хотя в некоторых случаях это может сработать, также могут быть случаи, когда два почти одинаковых значения оказываются по разные стороны порога и все еще различаются после округления. Их все равно нужно будет как-то решать.
Поэтому мне интересно, есть ли способ реализовать std::map (или сопоставимую структуру) таким образом, чтобы обеспечить нечеткий поиск на основе значений, находящихся в пределах определенного допуска друг от друга. Нет необходимости иметь почти идентичные записи на карте — при попытке добавить новую запись с ключом, близким к существующей записи, ключ можно (и нужно) рассматривать как уже существующий на карте.
Я не хочу добавлять в проект какие-либо новые внешние зависимости, но он уже использует Boost, любая структура, предоставленная Boost, будет работать.
Подробнее здесь: https://stackoverflow.com/questions/798 ... uzzy-match