`std::map` (или эквивалент) с нечетким совпадениемC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 `std::map` (или эквивалент) с нечетким совпадением

Сообщение Anonymous »

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

Подробнее здесь: https://stackoverflow.com/questions/798 ... uzzy-match
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»