0

好的,这是我的问题:

  • 我有一个类(让我们称之为MyClass),有几个变量(其中一个是score
  • 我也有一个MyClass对象向量(例如vector<MyClass> MyObjects;

现在,鉴于我尝试对数组进行排序(使用sort(MyObjects.begin(),MyObjects.end(),MyClassCompare());)并注意到性能显着下降(并且最终可能根本不需要向量的某些元素),我正在尝试:

  • 选择(当前)最大元素(具有最大值的元素score
  • 从向量中删除它
  • 选择下一个最大元素
  • 等等...

有没有办法在 C++ 中使用内置函数/库来实现这一点?有任何想法吗?


提示:速度和性能至关重要

4

2 回答 2

1

如果您需要访问集合的最大值元素,您将不得不在 (a) 插入时预先或 (b) 在搜索时产生一些性能损失。您已经注意到(b)很昂贵,可能是由于您选择的方法,并且正在询问如何才能更快地做到这一点。

开箱即用priority_queue,它可能提供您正在寻找的东西。我想性能会比您当前的代码更好。

于 2013-01-30T16:27:45.787 回答
0

如果您正在“收集”您稍后将按某种顺序(最大、最小等)选择事物的数据,您将有几个选择:

  1. 边走边分类。
  2. 收集完所有数据后进行排序。
  3. 搜索数据时性能不佳。
  4. 创建两组数据,其中一组已排序,并对未排序的数据项具有某种索引。

在您的情况下,您正在谈论从集合中删除一些数据。是否需要您实际删除数据,或者您只需跟踪“不再需要”的内容?如果是后者,也许上面的选项四是一个不错的选择 - 您只需将其从排序表中删除即可。因为这比项目列表本身要小得多[大概“MyClass”大于两个整数]。

于 2013-01-30T16:11:42.617 回答