假设一个类被定义如下:
现在假设我们有一个包含大量元素的
给定一个新的
此外,是否存在一种容器类似于
至于我为什么问这个问题: 我有几个值,它们表示其他对象(在我的情况下,整数表示图像),相似的图像会得到相似的值。当逐个将值插入容器时,如果已经存在相似的值,则希望避免添加该值。我不关心插入顺序导致不同的容器。
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&)
或其他方法。 - Mooing Duckstd::map
。听起来像是一个区间树或者你可以在其中搜索最接近匹配的map
,这可能会解决你的问题。 - Veedracmap
,在插入之前只需检查要插入的值是否与其在map
中的upper_bound
或lower_bound
是fuzzyEqual
的即可。 - Veedrac