C++中比较向量的最快方法是什么?

3

在C++中检查两个向量是否相等的最快方法是什么?

我正在尝试找到最快的方式来查看矩阵中的任何一行是否等于任何一列,因此逐个元素比较并在不相等时退出循环并不够好。


向量是什么类型?它们的组成部分的实际类型是什么? - Basile Starynkevitch
2
想象以下实验:取一个包含一百万个元素的向量,复制它,然后随机更改一个单独的元素。你的比较算法必须检查所有元素,否则它可能会错过这个单一的变化。因此,在基本算法中你几乎无法进行任何改进。 - MSalters
3个回答

5
不要重复发明轮子。您可以使用来自<algorithm>std::equal
它具有以下复杂度:
如果InputIterator1和InputIterator2满足随机访问迭代器的要求且last1 - first1 != last2 - first2,则不应用相应谓词。否则,最多应用min(last1 - first1, last2 - first2)次相应谓词。
这就是您要找的内容。 有关更多详细信息,请参见文档。
正如评论中所提到的,operator==std::equal之间存在微妙的区别:如果类型不同(例如std::vector<int>std::vector<double>),前者将无法工作,而后者可以工作。
我试图提供最通用的解决方案。
如果类型相同,当然operator==也能正常工作,就像 @Jarod42所提到的那样

1
vector::operator == 更加简单。 - Jarod42
3
有一个微妙的区别:如果类型不同,operator== 将无法工作,而 std::equal 可以代替它。 - skypjack

3

只需使用向量的operator ==

std::vector<int> v1{1, 2, 3, 4}, v2{1, 2, 3, 4};
bool are_equal = (v1 == v2);

请注意,如果向量类型不同,则此方法将无法正常工作。 - skypjack

0

在 C++ 的 Vector STL 中,等号运算符(==)被重载了。因此,您可以像比较两个整数一样直接比较它们。

要比较矩阵的行和列,可以使用循环并直接使用 == 比较行和列。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接