如何检查两个对象是否相同

时间:2014-01-18 12:26:55

标签: c++

我有一个包含同一类的几个对象的向量。我试图遍历向量并将每个对象与一个给定对象进行比较,如果它们相同则返回该对象的向量中的位置。我该怎么做呢?

例如,我想在包含[foo1,foo2,foo3,foo4]

的向量中找到对象foo3

4 个答案:

答案 0 :(得分: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 ++库中内置的其他搜索工具。正常运行的关键是==运算符的正确重载。

答案 1 :(得分: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 () ;

答案 2 :(得分:0)

您可以为对象重载等于运算符...因此您可以将它们作为常规内置类型进行比较。 之后,您可以使用std :: find函数

答案 3 :(得分:0)

我遇到了类似的问题,将对象/结构转换为字符列表。

参考文献:

(char*)&reference1 == (char*)&reference2

指针:

(char*)pointer1 == (char*)pointer2

它们也可以混合在一起:

(char*)pointer1 == (char*)&reference2