我有一個包含相同類的幾個對象的向量。我試圖循環遍歷向量,並將每個對象與一個給定對象進行比較,如果它們相同,則返回該對象向量中的位置。我將如何去做這件事?如何檢查兩個對象是否相同
例如,我想找到載體包含的對象foo3 [foo1,foo2的,foo3,foo4]
我有一個包含相同類的幾個對象的向量。我試圖循環遍歷向量,並將每個對象與一個給定對象進行比較,如果它們相同,則返回該對象向量中的位置。我將如何去做這件事?如何檢查兩個對象是否相同
例如,我想找到載體包含的對象foo3 [foo1,foo2的,foo3,foo4]
使用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() ;
您可以重載==
運營商,然後我們Ë它在你的對象進行比較,就好像他們是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++庫中。正確運行的關鍵是對==
操作員進行正確的超載。
重載==操作符時,我是否必須明確說明它們相等的情況?因爲我可能有兩個對象具有相同的屬性,但卻是不同的對象。 –
@BenMcAlindin'std :: vector
您可以重載對象的平等運算符...因此您可以將它們作爲正常的內置類型進行比較。 之後,您可以使用std :: find函數
請參閱http://stackoverflow.com/a/5228307/1729885 –
['std :: find'](http://en.cppreference.com/w/cpp/algorithm/find) – jrok