重载+运算符以组合使用向量的两个词典

时间:2014-09-16 07:21:37

标签: c++ operator-overloading overloading stdvector

我是C ++的初学者,我一直试图弄清楚这一点,我无法弄清楚这些错误。

我需要做的是为我创建的名为Dictionary的类重载+运算符。 Dictionary使用向量来存储键/值对,我在这里发了一个类对:

class Pair {
    private:
    string key;
    int value;
    public: 
    Pair(string k="", int v=0){key=k; value=v;};//should we be allowed to have 0,0 pairs?
    ~Pair(){};
    string getKey(){return key;};
    int getValue(){return value;};

};

这是我的Dictionary类和+运算符的重载:

class Dictionary{
    std::vector<Pair> dic;
public:
    Dictionary(){};
    ~Dictionary(){};
Dictionary operator +(const Dictionary &vec2){
    Dictionary combined;
    combined.dic.reserve( combined.dic.size() + vec2.dic.size() ); // preallocate memory
    combined.dic.insert( combined.dic.end(), combined.dic.begin(), combined.dic.end() );
    combined.dic.insert( combined.dic.end(), vec2.dic.begin(), vec2.dic.end() );
    //dic.insert( dic.end(), vec2.dic.begin(), vec2.dic.end() );
    if (unique( combined.dic.begin(), combined.dic.end() )){
        return combined;
    }
    else{
        cout<<"ERROR: the dictionaries each contain the same key!"<<endl;       
    }
}

我想要实现的是,当我使用+一起添加两个词典时,如果没有重复的键/值对,它们将组合成一个大词典。 (这就是唯一的用途)如果有重复,那么不要添加它们,只是打印出错误。

当我编译时,我从algorithm.cc得到这个错误: “/opt/local/solstudio12.2/prod/include/CC/Cstd/algorithm.cc”,第205行:错误:操作“Pair == Pair”是非法的。 “/opt/local/solstudio12.2/prod/include/CC/Cstd/algorithm”,第482行:其中:实例化“std :: adjacent_find(Pair *,Pair *)”。 “/opt/local/solstudio12.2/prod/include/CC/Cstd/algorithm”,第482行:其中:从非模板代码实例化。 1检测到错误。

我可以就如何解决这个问题并解决这个问题提出一些建议吗?非常感谢你!

1 个答案:

答案 0 :(得分:1)

std::unique调用元素operator==来判断元素是否相同。您需要为operator==定义Pair。该错误消息甚至会告诉您它正在尝试在==上执行Pair并失败。

请注意std::unique仅删除连续重复项。如果您的容器未分类(如果您将两个向量连接起来将是这样),那么您可能仍然有此检查未检测到的非连续重复项。

使用已排序的容器似乎是一个更好的主意,并执行排序合并而不是连接。 map似乎是一个更好的数据结构。