比较两个排序的数字向量(性能优先)
Compare two sorted vector of numbers (Performance being priority)
我正在尝试探索是否有更好的方法来比较两个相同大小的向量。
意图:我有一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
全部排序的事实中会有一种更有效的方法。此外,table
中每个vector
的大小大致约为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; });
vector
operator<
执行字典顺序比较,即它查看两个vectors
中不同的第一个位置,并执行该位置的值比较。这是最好的,对vectors
进行排序不会使其更有效率。您可以编写自己的比较函数(与operator<
相反)假设vectors
大小相等,但我怀疑这是否值得付出努力。
编辑:一些解释为什么这是最佳的(在某种意义上):鉴于向量的顺序应该基于它们的内容,你必须检查至少一个位置。你比较这个位置的值,如果它们不相等,你就完成了。如果没有,您别无选择,只能检查另一个位置,依此类推。这里唯一可以优化的是检查位置的顺序,尝试首先检查变化更强烈的位置。当然,如果可能,这取决于您的用例。如果你对向量进行排序的频率远远高于对向量的更改频率,你也可以为每个向量计算某种哈希值并比较它们。
另一个编辑:实际上你可以做一件小事:如果你按排序顺序浏览向量并遇到你的向量可以包含的最大可能值,你不必检查任何进一步的位置,因为它们无论如何都是相等的。因此,第一个向量不能更小。这是向量排序的唯一情况,可以预测尚未检查的所有位置的值,因此不应有任何进一步的优化。
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- C 指针向量如何影响性能
- 在将其尺寸较大的向量移动到容量较小的向量之前,是否可以通过使用Reserve()来提高代码性能
- 比较两个排序的数字向量(性能优先)
- 为什么这个普通的数组实现比STD ::向量实现性能慢
- 几对性能问题(一个较大的向量与较小的块向量),值得存储迭代索引以进行矢量访问
- 与英特尔相比,GNU C++编译器在对向量进行排序时性能较差
- 如果构建和破坏了许多向量,自定义分配器会提高性能<T>吗?
- 指针向量与值向量 大内存块与小内存块的性能损失
- 以最大性能将双精度的向量截断为单精度
- GPU上计算特征值和特征向量的性能较差
- 使用 static_cast 处理混合(基础和派生)对象的向量是否存在性能风险?(又名 "it this a dumb idea?" )
- 列表排序和结构体向量排序之间的性能差距.c++
- 向量,矩阵和四元数的缓存性能
- 对象,引用对象,引用带函数和不带函数的向量元素-观察到的性能差异
- 在并行追加时,使用向量列表和向量的向量对性能的影响
- [ 性能]--- 字符串::运算符+= 与向量<char>push_back
- 函数后向量赋值的性能