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

Get (next) Max object from a vector

本文关键字:对象 下一个 向量 获取      更新时间:2023-10-16

好的,所以我的问题来了:

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

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

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

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


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

如果需要访问集合的最大值元素,则必须在 (a) 插入时预先或 (b) 在搜索时产生一些性能影响。您已经注意到(b)很昂贵,可能是由于您选择的方法,并且正在询问如何使其更快。

开箱即用,您priority_queue它可能正是您正在寻找的内容。我想性能会比你当前的代码更好。

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

  1. 边走边提。
  2. 收集所有数据后进行排序。
  3. 搜索数据时性能不佳。
  4. 创建两组数据,其中一组是排序的,其中包含未排序数据项的某种索引。

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