从向量中获取(下一个)Max对象

时间:2013-01-30 15:52:49

标签: c++ performance sorting vector max

好的,所以这是我的问题:

  • 我正在上课(让我们称之为MyClass),有几个变量(其中一个是score
  • 我还有MyClass个对象的向量(例如vector<MyClass> MyObjects;

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

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

有没有办法在C ++中使用内置函数/库来实现? 有什么想法吗?


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

2 个答案:

答案 0 :(得分:1)

如果您需要访问集合的最大值元素,则必须在(a)插入时提前或(b)搜索时间内产生一些性能影响。您已经注意到(b)价格昂贵,可能是由于您选择的方法,并且询问如何更快地完成此操作。

开箱即用,您priority_queue可能提供您正在寻找的内容。我认为性能会优于您当前的代码。

答案 1 :(得分:0)

如果您正在“收集”以后要按某种顺序(最大,最小等)选择内容的数据,您将有以下几种选择:

  1. 随时分类。
  2. 收集完所有数据后进行排序。
  3. 搜索您的数据时效果不佳。
  4. 创建两组数据,其中一组已排序,并为您的未排序数据项提供某种索引。
  5. 在您的情况下,您正在谈论从集合中删除一些数据。是否要求您实际删除数据,或者只是跟踪“不再需要”的内容?如果是后者,也许上面的选项4是一个不错的选择 - 你只需将它从排序表中删除即可。因为这比项目列表本身小得多[推测“MyClass”大于两个整数]。