从向量中获取(下一个)最大对象
Get (next) Max object from a vector
好的,所以我的问题来了:
- 我有一个类(我们称之为
MyClass
),有几个变量(其中一个是score
) - 我还有一个
MyClass
对象的向量(例如vector<MyClass> MyObjects;
)
现在,鉴于我尝试对数组进行排序(使用 sort(MyObjects.begin(),MyObjects.end(),MyClassCompare());
)并注意到性能大幅下降(而且最终可能根本不需要向量的某些元素),我正在尝试:
- 选择(当前)最大元素(具有最大
score
值的元素) - 从矢量中删除它
- 选择下一个最大元素
- 等等...
有没有办法在C++中使用内置函数/库来实现这一点?有什么想法吗?
提示:速度和性能至关重要。
如果需要访问集合的最大值元素,则必须在 (a) 插入时预先或 (b) 在搜索时产生一些性能影响。您已经注意到(b)很昂贵,可能是由于您选择的方法,并且正在询问如何使其更快。
开箱即用,您priority_queue
它可能正是您正在寻找的内容。我想性能会比你当前的代码更好。
如果您正在"收集"数据,以便稍后按某种顺序(最大、最小等)选择内容,您将有以下几种选择:
- 边走边提。
- 收集所有数据后进行排序。
- 搜索数据时性能不佳。
- 创建两组数据,其中一组是排序的,其中包含未排序数据项的某种索引。
在您的情况下,您正在谈论从集合中删除一些数据。是否需要实际删除数据,或者只是跟踪"不再需要"的内容?如果是后者,也许上面的选项四是一个不错的选择 - 您只需将其从排序表中删除即可。因为这比项目列表本身小得多[大概"MyClass"大于两个整数]。
相关文章:
- 重新定位图像时如何前进到下一个内存块
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- CIN 仅在输入非数字值时跳过下一个 CIN
- 查找最小的下一个更大的元素
- 转到基于范围的 for 循环中的下一个迭代器
- 如何检查流中文件的下一个单词是否为 alpha?
- 如何打印下一个字母直到 Z 并继续到 A?
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- 有没有办法在同名类 (c++) 中为对象分配一个指针变量
- 使用一个内存集数组和单个堆栈在 O(n) 中查找数组的下一个更大元素
- 有没有一种标准方法可以在C++中获取第 n 个"下一个"浮点值
- 下一个云桌面客户端构建过程
- OpenGL-缓冲区更新下一个渲染对象
- 通过对象进行迭代,而没有定义下一个()
- 参数化的下一个池对于汇总对象的类层次结构不可能
- 在列表迭代器中设置下一个对象
- 在 C# 中获取内存中的下一个对象大小的空间
- C++如何通过引用将对象的向量传递到一个函数中,然后再传递到下一个函数中
- 从向量中获取(下一个)最大对象