【问题标题】:Removing duplicate items in a vector of objects删除对象向量中的重复项
【发布时间】:2020-04-29 12:20:40
【问题描述】:

我有一个班级 CPerson

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;
    }

然后我有一个第二类 CCity,它有一个带有 CPerson 对象的向量。

class CCity
{
public:
    string city_name;
    vector <CPerson> people;
public:
    CCity() {};
    CCity(string filename)
    {
        string name, egn;
        ifstream file(filename);
        file >> city_name;
        while (file >> name >> egn)
        {
            people.push_back(CPerson(name,egn));
        }
    }
    void remove_duplicates()
    {
        sort(people.begin(), people.end());
        people.erase(unique(people.begin(), people.end()-1));
    }
};

我已经重载了 == 和

Varna
EGN0000001 a
EGN0000001 b
EGN0000002 c
EGN0000003 d
EGN0000004 e
EGN0000004 f
EGN0000005 g
EGN0000006 h
EGN0000001 i

【问题讨论】:

    标签: vector duplicates unique erase


    【解决方案1】:

    请参阅此link。我认为你正在做的是擦除最后一个独特的元素。 作为答案,我希望这段代码可以工作:

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

    希望对你有帮助

    【讨论】:

    • 是的,我正在删除最后一个唯一元素。但是你的代码在我的复制粘贴时有错误。
    • @duerdak 我的代码示例的最后一行包含myvector,它是people 向量的占位符。很抱歉给您带来不便。
    【解决方案2】:

    错误是我将应该是 egn 的内容插入到 name 中,并将 name 插入到 egn 中。 这个:

    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));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 2018-12-11
      • 2011-11-29
      • 1970-01-01
      相关资源
      最近更新 更多