比较两个排序的数字向量(性能优先)

时间:2017-10-14 21:53:54

标签: c++ sorting vector

我正在尝试探索比较两个相同大小的矢量的更好方法。

意图:我的vector vectors名为table。每个vector的大小相同。它们由0-1000范围内的数字组成。

在这种情况下,建议对名为table的数据结构进行排序的方式是什么?这里,排序是指被排序的tabletable的每个元素都已排序。比较vector v1vector v2的标准(词典比较)。 v1小于v2当且仅当第一个索引l的值v1[l] != v2[l]时,v1[l] < v2[l]保留属性vectors

目前,我正在使用以下代码段。我相信从vector全部排序的事实中会有更有效的方法。此外,table中每个4-10的大小大约为std::vector<std::vector<int>> table; /* code that populates vector named table */ std::sort(table.begin(), table.end(), [](const std::vector<int>& lhs, const std::vector<int>& rhs) { return lhs < rhs; });

rxjs/Rx

1 个答案:

答案 0 :(得分:1)

operator<的{​​{1}}执行lexicographical comparison,即它会查看两个vector中不同的第一个位置,并对此位置的值进行比较。这几乎是最佳的,让vectors排序不会使它更有效率。你可以编写你自己的比较函数(与vectors相反)假设operator<具有相同的大小,但我怀疑这是值得的。

编辑:一些解释为什么这是最优的(在某种意义上):假设矢量的顺序应该基于它们的内容,你必须检查至少一个位置。你比较这个帖子的值,如果它们不相等,你就完成了。如果没有,你别无选择,只能检查另一个位置,等等。在这里可以优化的唯一事情是检查位置的顺序,试图检查首先变化更强烈的位置。如果可能的话,当然取决于您的用例。如果您对矢量进行排序的频率远远超过更改它们,那么您还可以为每个矢量计算某种哈希值并进行比较。

另一个编辑:实际上你可以做一件小事:如果按排序顺序浏览向量并遇到向量可以包含的最大可能值,则不必检查任何进一步的位置,因为无论如何这些都是平等的。因此第一个矢量不能更小。这是向量排序这一事实的唯一情况,可以预测尚未检查的所有邮件的值,因此不应该进行任何进一步的优化。