比较矢量迭代中的两个对象C

Compare two objects in vector iteration C++

本文关键字:两个 对象 迭代 比较      更新时间:2023-10-16

如何在这种情况下实现比较功能?

void remove(const Object1 &object1) {
    for(auto &object2 : objectVector) {
        if(object1 == object2) {
            /*....... */
        }
    }
} 

您问2个问题:

  1. 如何使对象可比较:

通过为课程实现operator==。请确保您也覆盖operator !=

作为成员函数:

bool Object1::operator ==(const Object1 &b) const
{
    // return true if *this equals b;
}

或作为免费功能:

bool operator ==(const Object1 &a, const Object1 &b)
  1. 如何从向量中删除具有给定值的对象:

最简单的方法是使用std::remove

objectVector.erase(std::remove(objectVector.begin(), objectVector.end(), object1), objectVector.end());

您也可以在通过向量迭代时删除对象,但是您必须记住,当时向量迭代器无效。然后,您可能不会进一步迭代向量。

类的对象可以包含不同类型和数量的成员,因此假设您有一个A

class A{
    int x,
    float y;
    char* z;
};

您有两个实例:

A a1;
A a2;

比较:

if(a1 == a2) // compile-time error
    ;// DoSomeThing

上方会出现错误,因为编译器不知道将彼此比较哪些字段。解决方案是超载等价运算符" =="以在类的对象上工作。

class Student{
    public:
        Student(std::string, int age);
        std::string getName()const;
        int getAge()const;
        bool operator == (const Student&);
    private:
        std::string name;
        int age;
};
Student::Student(std::string str, int x) : 
    name(str), age(x){
}
bool Student::operator == (const Student& rhs){
    return age == rhs.age;  
}
std::string Student::getName()const{
    return name;
}
int Student::getAge()const{
    return age;
}

int main(){

    Student a("Alpha", 77);
    Student b("Beta", 49);
    if(a == b)
        std::cout << a.getName() << " is the same age as " << 
        b.getName() << std::endl;

    cout << endl << endl;
    return 0;
}
  • 现在,编译器知道如何比较班级的对象,并知道对您的opters成员进行比较的内容。

如果对象是一类,则可以将operator替补为"朋友函数"中的运算符==,或者您可以实现自己的函数bool iSequal(object1 o1,object1 o2({if(if(if((返回true;返回false;}