【发布时间】:2012-04-26 21:20:18
【问题描述】:
我有一个例程,我在其中定义了一堆对象(大约 20 个),称它们为 Jet,它们有一个定义的 <,我用来对它们进行排序。排序后,我取最低的两个。有什么快速的方法来做到这一点?到目前为止我想到的选项:
-
boost::ptr_vector<Jet>使用内置的.sort(),取前两个, -
boost::ptr_list<Jet>,用.sort(),取前两个 - 使用上面的列表,但不是排序,而是使用
max_element,删除元素,然后再次运行。
我认为使用std::vector<Jet> 是最糟糕的选择,因为:我不需要随机访问;排序将在内存中移动对象;并且在调用push_back(Jet) 时将复制对象。由于需要复制,我还假设std::list<Jet> 会比boost::ptr_list<Jet> 差。我会进一步假设两次使用max_element 会比对整个列表进行排序更快。
我的逻辑合理吗?性能差异会很大吗?还有其他我没有想到的选择吗?
【问题讨论】:
-
你为什么不测试它并告诉我们? (另外,你的假设可能是错误的,一定要测试一下)
-
有效问题:因为我在分析方面不是很有经验,而且我认为这里有人可能比我更聪明。