【发布时间】:2010-06-22 16:17:49
【问题描述】:
我打算编写一个交互式 C++ 几何处理插件,该插件将经常对大量数据进行排序。虽然初步迹象表明排序只需要一两秒钟,但我更愿意在这段时间内显示进度 - 即我想每秒更新几次进度指示器。这比打开等待光标并让用户看到的程序冻结一段不确定的时间(即使只是几秒钟)更可取。
如果我要使用 std::sort 之类的东西,我可以使用比较功能不时更新进度指示器,但我不知道“完成百分比”。我还可以将排序分解为子排序,更新子排序之间的进度,然后合并。我最好的选择可能是编写自己的排序方法,尽管我不知道要获得与 std::sort 一样好的性能(并确保正确性)需要付出多少努力。无论如何,该排序方法偶尔会向回调方法发送“完成百分比”。
我想知道其他人是否遇到并解决了这个问题 - 我希望标准库中可能有一种排序方法可以满足我的需求,或者其他一些我没有想到的技术。
更新:感谢您迄今为止的精彩回答。有一些非常好的建议,我将推迟选择接受的答案,直到我有机会在我即将进行的项目中测试这些想法。
更新 2: 我完成了我的项目,结果证明这不是问题(至少对客户而言。由于他们将销售该软件,他们可能仍会从他们的会改变主意的客户)。选择一个被接受的答案很困难,因为有很多好的答案,但最后我选择的那个指向了一篇关于 Merge Sort 的 wiki 文章,它有一个非常令人回味的动画。如果我需要继续这样做,那是我会采取的第一个策略)。
【问题讨论】:
-
我个人会推迟添加这样的功能,直到观察到排序的实际性能。否则,它正在解决一个可能不存在的问题。您也可以走简单的路线并在某种日志文本控件或状态栏中显示“排序...”。
-
@Reinderien:同意,如果没坏就不要修。但我试图提前考虑这一点。而我在 3D 图形和几何处理方面的经验是,用户很容易用比你想象的更大的模型和数据扼杀任何东西。
标签: c++ algorithm sorting progress-bar