Я хотел бы создать карту STL, чтобы узнать, достаточно ли близко к другому элементу в трехмерном пространстве. До сих пор мой «менее-функтор» работал достаточно хорошо, вставленный по следующей ссылке.Использование «приблизительной» STL-карты
Теперь эта проблема не совсем проблема «ближайшего соседа». Скорее это проблема «есть ли сосед на некотором расстоянии».
В моем примере показано только одно измерение. Я прояснил размеры Y/Z для ясности.
class ApproximateLessFunctor {
public:
ApproximateLessFunctor(float fudgeFactor) :
mFudgeFactor(fudgeFactor) {};
bool operator()(float a, float b) const {
return (a < (b - mFudgeFactor));
}
float mFudgeFactor;
};
typedef map<float, int, ApproximateLessFunctor> XAxisMap;
class XAxis {
public:
XAxisMap vMap;
XAxis(ApproximateLessFunctor functor, float x, int v)
: vMap(functor)
{
vMap.insert(make_pair(x, v));
}
};
В редких случаях, и я имею в виду на самом деле редкоземельной подсистеме карты не найти соответствующую запись, когда позиции совпадают.
Есть ли что-то, что я могу сделать лучше, чтобы реализовать это, все еще используя контейнеры STL?
Итак, это проблема ближайшего соседа с радиусом поиска, правильно? Возможно, вам захочется взглянуть на библиотеку FLANN, она реализует поиск радиуса. Я думаю, другие библиотеки. – Tim
Ваш функтор ** должен ** определить [строгий слабый порядок] (http://en.wikipedia.org/wiki/Strict_weak_ordering). Твой нет. –
@ OliCharlesworth, я боялся, что ты это скажешь. – macetw