2011-06-06 141 views
56

有什么办法可以比较两个向量吗?C++:比较两个向量

if (vector1 == vector2) 
    DoSomething(); 

注:目前,这些载体是没有排序,并包含整数值。

+2

这是否无法编译? – Maxpm 2011-06-06 05:18:37

+23

你的意思是你想比较矢量中元素顺序的*无关*否则,上面的代码应该可以工作。 – Naveen 2011-06-06 05:19:44

+1

一个简单的方法来比较,如果你有两个未分类的数组,你想检查包含完全相同的值,是**排序**,然后使用任何一种标准库方法进行比较。 – darvids0n 2011-06-06 05:36:35

回答

27

检查std::mismatch C++的方法。

比较载体已在上讨论过DaniWeb论坛还有回答了

C++: Comparing two vectors

检查以下SO岗位。将有助于你。他们用不同的方法达到了同样的效果。

Compare two vectors C++

+0

这是否要求范围进行排序? – Naveen 2011-06-06 05:21:27

+0

@Naveen:检查第二个链接.. – Jhaliya 2011-06-06 05:22:06

+2

'lexicographical_compare'也可以在这里使用,并且不必处理哪个范围是更长的范围。 – 2011-06-06 05:23:47

1

如果他们真的非得不排序,(他们真的不知道..如果你正在处理的元素的几十万那么我要问,为什么你会喜欢比较载体这个),你可以将一个比较方法与未排序数组一起使用。

我虽然做唯一的方法是创建一个临时vector3假装加入的vector1所有元素,然后做对的vector2每个元素搜索在vector3,如果去除它做一个set_intersection找到。我知道这听起来很糟糕,但这就是为什么我不会很快编写任何C++标准库。

真的,只是先排序。

+0

或者可能创建两个'set'对象并比较它们?如果真的不需要触摸矢量,那么这样做会不会更容易。 – Naveen 2011-06-06 06:34:47

+0

取决于向量(N * O(N))与N个元素排序的N个构造函数的N查找和移除操作的快速程度(cplusplus.com的参考文献“对于未排序的序列,linearithmic(N * logN)”。 。“)+一个有序的比较('O(N)')。 – darvids0n 2011-06-06 06:55:24

52

您的代码(vector1 == vector2)是正确的C++语法。矢量有一个==运算符。

如果要将短向量与较长向量的一部分进行比较,可以使用equal()运算符作为向量。 (documentation here

下面是一个例子:

using namespace std; 

if(equal(vector1.begin(), vector1.end(), vector2.begin())) 
    DoSomething(); 
+2

std :: equal()对普通数组也是有效的,而等号运算符不是,例如:int a [1000],b [1000];如果(std :: equal(a,a + 1000,b))DoSomething(); – 2014-04-26 05:19:04