2011-06-06 140 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