2014-01-18 78 views
1

我有一個包含相同類的幾個對象的向量。我試圖循環遍歷向量,並將每個對象與一個給定對象進行比較,如果它們相同,則返回該對象向量中的位置。我將如何去做這件事?如何檢查兩個對象是否相同

例如,我想找到載體包含的對象foo3 [foo1,foo2的,foo3,foo4]

+0

請參閱http://stackoverflow.com/a/5228307/1729885 –

+0

['std :: find'](http://en.cppreference.com/w/cpp/algorithm/find) – jrok

回答

0

使用std::find超載==你下課後

auto it = std::find(vec.begin() , vec.end() , obj); //eg. obj = foo3

要獲得位置:

int pos = -1; 
if(it != vec.end()) 
    pos = it - vec.begin() ; 
1

您可以重載==運營商,然後我們Ë它在你的對象進行比較,就好像他們是C++的內置類型之一的項目:

// Overload == for myclass 
bool operator==(const myclass& a, const myclass& b) { 
    return ...; // true if a is the same as b; false otherwise 
} 

現在你可以這樣做:

myclass toFind = ... 
std::vector<myclass> items = ... 
for (int i = 0 ; i != items.size() ; i++) { 
    if (items[i] == toFind) { 
     cout << "Item is found at index " << i << endl; 
    } 
} 

您還可以使用內置的其他搜索設施到標準的C++庫中。正確運行的關鍵是對==操作員進行正確的超載。

+0

重載==操作符時,我是否必須明確說明它們相等的情況?因爲我可能有兩個對象具有相同的屬性,但卻是不同的對象。 –

+0

@BenMcAlindin'std :: vector '複製你的對象。一旦一個對象在向量中,它就是內存中的一個不同的對象,所以比較屬性就是你所能做的,除非你存儲指針。如果你確實存儲了指針(plain或「smart」),你只需要判斷兩個對象是否相同就是用'=='操作符來比較它們的指針。 – dasblinkenlight

0

您可以重載對象的平等運算符...因此您可以將它們作爲正常的內置類型進行比較。 之後,您可以使用std :: find函數

相關問題