如何从C++中的向量中删除几乎重复的内容

Max*_*ahm 3 c++ vector floating-accuracy duplicates duplicate-removal

我有一个浮点数的std :: vector我想不包含重复项,但是填充向量的数学运算不是100%精确的.向量的值相差几百,但应视为相同的点.例如,这里有一些值:

...
X: -43.094505
X: -43.094501
X: -43.094498
...
Run Code Online (Sandbox Code Playgroud)

从这样的向量中删除重复项的最佳/最有效方法是什么.

Pra*_*ian 5

首先使用的矢量排序std::sort.然后使用std::unique自定义谓词删除重复项.

std::unique(v.begin(), v.end(), 
            [](double l, double r) { return std::abs(l - r) < 0.01; });
// treats any numbers that differ by less than 0.01 as equal
Run Code Online (Sandbox Code Playgroud)

现场演示