C++:删除矩阵中的重复数字

标签 c++ coordinates

我想从表示格式为“x y z”的坐标的矩阵中删除数字。一个例子:

1.211 1.647 1.041

2.144 2.684 1.548

1.657 2.245 1.021

1.657 0.984 2.347

2.154 0.347 2.472

1.211 1.647 1.041

在此示例中,坐标 1 和 6 相同(x、y 和 z 相同),我想删除它们,但我不想删除只有一个值等于 x 的坐标 3 和 4 的情况-协调)。

这些值在一个文本文件中,我想在另一个文件甚至同一个文件中打印坐标而不重复。

最佳答案

一个非常简单的解决方案是将每一行视为一个字符串并使用一组字符串。当你逐行遍历文件时,你检查当前行是否存在于集合中,如果不存在,你插入并打印它。 复杂度:O(nlogn),需要额外的内存:最坏情况下几乎与输入文件相同

与之前的解决方案具有相同的复杂性和最坏情况下的内存消耗,您可以将文件加载到内存中,按行排序,然后在打印时轻松跳过重复项。如果允许对文件重新排序,也可以在文件内部完成同样的操作,这样您需要的额外内存很少,但速度要慢得多。

如果内存和存储是个问题(我假设你不能复制文件),你可以使用简单的方法在打印前将当前行与所有之前的行进行比较,时间复杂度为 O(n^2)复杂但没有额外的内存。然而,这是一个相当糟糕的解决方案,因为您必须多次从文件中读取,与主内存相比,这可能非常慢。

关于C++:删除矩阵中的重复数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32355216/

相关文章:

c++ - 如何将 EXACTLY n 位写入 UDP 数据包 C++

java - Android java计算距离sqlite的多个坐标

c# - 查找离给定位置最近的城市

c# - 如何获取 Windows 窗体上 PictureBox 的左上角屏幕坐标

c++ - 来自 C 和 C++ 目标文件的共享库

c++ - 在什么情况下您必须进行调试构建?

c++ - 如何在不破坏现有应用程序的情况下更改 API 中 STL 容器的数据类型?

c++ - 在重载解析期间调用转换运算符而不是转换 C++17 中的构造函数

Python:使用到点 A (x0, y0) 的距离和角度找到给定点 B 的 x,y 坐标

ios - 动态获取CGRect坐标