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

C++ 如何检查两个对象是否相同,c++,C++,我有一个向量,包含同一类的几个对象。我试图通过向量循环,将每个对象与一个给定对象进行比较,如果它们相同,则返回该对象在向量中的位置。我该怎么办 例如,我想在向量中找到对象foo3,该向量包含[foo1,foo2,foo3,foo4]为您的类重载后使用= autoit=std::find(vec.begin(),vec.end(),obj)//例如,obj=foo3 要获得职位: int pos = -1; if( it != vec.end() ) pos = it - vec.begi

我有一个向量,包含同一类的几个对象。我试图通过向量循环,将每个对象与一个给定对象进行比较,如果它们相同,则返回该对象在向量中的位置。我该怎么办

例如,我想在向量中找到对象foo3,该向量包含[foo1,foo2,foo3,foo4]

为您的类重载后使用
=

autoit=std::find(vec.begin(),vec.end(),obj)//例如,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;
    }
}
myclass-toFind=。。。
标准::向量项=。。。
对于(int i=0;i!=items.size();i++){
if(项目[i]==toFind){

cout您可以重载对象的equal运算符…这样您就可以将它们作为正常的内置类型进行比较。
之后,您可以使用std::find函数

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

参考资料:

指针:

它们也可能混淆在一起:

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

查看重载==运算符时,我是否必须明确指出它们相等的情况?因为我可能有两个具有相同属性的对象,但它们是不同的对象。@BenMcAlindin
std::vector
复制对象。一旦向量中有一个对象,它在内存中就是另一个对象,因此比较属性就是全部你可以这样做,除非你存储指针。如果你存储指针,普通的还是“智能的”,你需要做的就是用
==
操作符比较两个对象的指针。
(char*)pointer1 == (char*)pointer2
(char*)pointer1 == (char*)&reference2