c++ - 如何从 C++ 中的 vector 中删除几乎重复项

标签 c++ vector duplicates duplicate-removal floating-accuracy

我有一个 std::vector float ,我不想包含重复项,但填充 vector 的数学不是 100% 精确的。该 vector 的值相差百分之几,但应视为同一点。例如,其中有一些值:

...
X: -43.094505
X: -43.094501
X: -43.094498
...

像这样从 vector 中删除重复项的最佳/最有效方法是什么。

最佳答案

首先使用 std::sort 对 vector 进行排序.然后使用 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

Live demo

关于c++ - 如何从 C++ 中的 vector 中删除几乎重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23232271/

相关文章:

C++ RAII 问题

c++ - 编译器选择错误的重载而不是有效的重载

c++ - 根据键组合两个映射的值

mysql - 在 SQL 表中的多个列上查找重复项以创建 UNIQUE 索引

mysql - SQL - 查找一列的重复项但另一列不同

C++ 程序显然打印内存地址而不是数组

c++ - 编译时检查是否有两个具有相同模板参数的模板实例化

c++ - 显然微不足道的函数调用中未处理的异常

python - 将值添加到 PySpark 中的 DenseVector 中

language-agnostic - 通用代码重复检测工具