我正在尝试探索比较两个相同大小的矢量的更好方法。
意图:我的vector
vectors
名为table
。每个vector
的大小相同。它们由0-1000
范围内的数字组成。
在这种情况下,建议对名为table
的数据结构进行排序的方式是什么?这里,排序是指被排序的table
。 table
的每个元素都已排序。比较vector v1
和vector 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
答案 0 :(得分:1)
operator<
的{{1}}执行lexicographical comparison,即它会查看两个vector
中不同的第一个位置,并对此位置的值进行比较。这几乎是最佳的,让vectors
排序不会使它更有效率。你可以编写你自己的比较函数(与vectors
相反)假设operator<
具有相同的大小,但我怀疑这是值得的。
编辑:一些解释为什么这是最优的(在某种意义上):假设矢量的顺序应该基于它们的内容,你必须检查至少一个位置。你比较这个帖子的值,如果它们不相等,你就完成了。如果没有,你别无选择,只能检查另一个位置,等等。在这里可以优化的唯一事情是检查位置的顺序,试图检查首先变化更强烈的位置。如果可能的话,当然取决于您的用例。如果您对矢量进行排序的频率远远超过更改它们,那么您还可以为每个矢量计算某种哈希值并进行比较。
另一个编辑:实际上你可以做一件小事:如果按排序顺序浏览向量并遇到向量可以包含的最大可能值,则不必检查任何进一步的位置,因为无论如何这些都是平等的。因此第一个矢量不能更小。这是向量排序这一事实的唯一情况,可以预测尚未检查的所有邮件的值,因此不应该进行任何进一步的优化。