Предположим, класс определяется следующим образом:быстрого нечеткого поиска в C++ контейнер
class Test
{
public:
Test(int arg)
{
x = arg;
}
bool fuzzyEqual(const Test& other) const {
if (abs(x - other.x) < FUZZY_EQUAL)
return true;
else return false;
}
int x;
private:
static const int FUZZY_EQUAL = 5;
};
Теперь предположим, что мы имеем std::vector<Test>
с большим количеством элементов.
Учитывая новый Test
объект, линейный поиск, самый быстрый способ найти первый элемент в векторе, который является «нечетким» равен (по аналогии) к нему?
Кроме того, есть контейнер, который работает как std::map
, но который принимает концепцию подобия, а не равенства?
А почему я спрашиваю: У меня есть несколько значений, которые представляют другие объекты (в моем случае, целое представляет собой изображение), и подобные изображения приводить к аналогичным значениям. При вставке значений по одному в контейнере я хочу избежать добавления значения, если он уже присутствует. Меня не волнует, что разные заказы вставки приводят к разным контейнерам.
перегрузка '==', чтобы быть непереходной, является плохой практикой, используйте 'bool isSimilar (const Test &)' или что-то вместо этого. –
@MooingDuck Исправлено, спасибо! – Banex
Я чувствую, что есть совершенно разумный вопрос, скрытый за бессмысленным фасадом. Возможно, если вы скажете нам, что вы на самом деле пытаетесь сделать, мы можем дать решение. – Veedrac