假设一个类定义如下:
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
一样工作的容器,但它接受相似性而不是相等的概念?
至于我要问的原因: 我有几个值代表一些其他对象(在我的例子中,一个整数代表一个图像),类似的图像产生相似的值。当在容器中一次插入一个值时,我想避免在已经存在类似值的情况下添加值。我不在乎不同的插入顺序导致不同的容器。
答案 0 :(得分:1)
您可以对矢量进行排序并使用二分搜索来查找距离点最小的位置。
例如,std::lower_bound
为您提供最小值&gt; = O(log(n))
中的初始值。而前一个元素--std::lower_bound
是最大的元素&lt;你的初始价值。如果存在等于的模糊值,则这两个找到的值中的一个是搜索到的值。