Vector 删除对象向量中的重复项

Vector 删除对象向量中的重复项,vector,duplicates,unique,erase,Vector,Duplicates,Unique,Erase,我有一个班级 class CPerson { private: string name; string egn; public: CPerson() {}; CPerson(string getname, string getegn) { name = getname; egn = getegn; } bool operator < (const CPerson &obj) {

我有一个班级

class CPerson
{
private:
    string name;
    string egn;
public:
    CPerson() {};
    CPerson(string getname, string getegn)
    {
        name = getname;
        egn = getegn;
    }
    bool operator < (const CPerson &obj)
    {
        if (egn < obj.egn)
            return true;
        else
            return false;
    }
    bool operator == (const CPerson &obj)
    {
        if (egn == obj.egn)
            return true;
        else
            return false;
    }
请看这个。我认为你所做的是删除最后一个唯一的元素。 作为回答,我希望此代码能够正常工作:

void remove_duplicates()
{
    sort(people.begin(), people.end());
    vector<int>::iterator it = unique(people.begin(), people.end());
    people.resize( std::distance(myvector.begin(),it));
}

我希望这对您有所帮助

错误在于我在名称中插入了应该是egn的内容,并在egn中插入了名称。 这:

应该是这样的:

CCity(string filename)
{
    string name, egn;
    ifstream file(filename);
    file >> city_name;
    while (file >> egn>> name)
    {
        people.push_back(CPerson(name,egn));
    }
}

是的,我正在删除最后一个独特的元素。但是当复制粘贴到我的代码中时,您的代码有错误。@duerdak我的代码示例的最后一行包含myvector,它是people vector的占位符。很抱歉给您带来不便。
void remove_duplicates()
{
    sort(people.begin(), people.end());
    vector<int>::iterator it = unique(people.begin(), people.end());
    people.resize( std::distance(myvector.begin(),it));
}
CCity(string filename)
{
    string name, egn;
    ifstream file(filename);
    file >> city_name;
    while (file >> name >> egn)
    {
        people.push_back(CPerson(name,egn));
    }
}
CCity(string filename)
{
    string name, egn;
    ifstream file(filename);
    file >> city_name;
    while (file >> egn>> name)
    {
        people.push_back(CPerson(name,egn));
    }
}