C ++容器

时间:2015-12-15 00:25:38

标签: c++ containers fuzzy-search

假设一个类定义如下:

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一样工作的容器,但它接受相似性而不是相等的概念?

至于我要问的原因: 我有几个值代表一些其他对象(在我的例子中,一个整数代表一个图像),类似的图像产生相似的值。当在容器中一次插入一个值时,我想避免在已经存在类似值的情况下添加值。我不在乎不同的插入顺序导致不同的容器。

1 个答案:

答案 0 :(得分:1)

您可以对矢量进行排序并使用二分搜索来查找距离点最小的位置。

例如,std::lower_bound为您提供最小值&gt; = O(log(n))中的初始值。而前一个元素--std::lower_bound是最大的元素&lt;你的初始价值。如果存在等于的模糊值,则这两个找到的值中的一个是搜索到的值。