我有一个例程,在其中定义了一堆对象(大约 20 个),称为它们Jet
,它们有一个<
我用来对它们进行排序的定义。排序后,我取最低的两个。有什么快速的方法来做到这一点?到目前为止我想到的选项:
boost::ptr_vector<Jet>
使用内置的.sort()
,取前两个,boost::ptr_list<Jet>
, 使用.sort()
, 取前两个- 使用上面的列表,而不是排序,使用
max_element
,删除元素,然后再次运行。
我认为 usingstd::vector<Jet>
是最糟糕的选择,因为:我不需要随机访问;排序将在内存中移动对象;并且在调用时将复制对象push_back(Jet)
。由于需要复制,我还假设 anstd::list<Jet>
会比boost::ptr_list<Jet>
. 我进一步假设采取max_element
两次会比对整个列表进行排序更快。
我的逻辑合理吗?性能差异会很大吗?还有其他我没有想到的选择吗?