重载+;用于组合两个使用向量的字典的运算符 我是C++初学者,我试着想一想,我不能理解这些错误。

重载+;用于组合两个使用向量的字典的运算符 我是C++初学者,我试着想一想,我不能理解这些错误。,c++,operator-overloading,overloading,stdvector,C++,Operator Overloading,Overloading,Stdvector,我需要做的是为我创建的名为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(){}; stri

我需要做的是为我创建的名为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;};

};
这是我的字典类和+运算符的重载:

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;       
    }
}
类字典{
std::载体dic;
公众:
字典(){};
~Dictionary(){};
字典运算符+(常量字典和向量2){
词典合并;
combined.dic.reserve(combined.dic.size()+vec2.dic.size());//预先分配内存
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(唯一(combined.dic.begin()、combined.dic.end()){
综合收益;
}
否则{

cout
std::unique
调用元素的
操作符==
以确定元素是否相同。您需要为
定义
操作符==
。错误消息甚至告诉您它正试图对两个
进行
=
操作,但失败了

请注意,
std::unique
仅删除连续的重复项。如果您的容器未排序(如果您将两个向量串联在一起),则您可能仍有未被此检查检测到的非连续重复项


使用排序容器,并进行排序合并而不是串联似乎是一个更好的主意。
map
在这里似乎是一个更好的数据结构。

听起来像
map
vector
更合适,至少对我来说是这样。当你检查它是相等的,不是不相等的。嗨,Joachim,我删除了运算符!=我仍然得到了相同的错误。我没有调用该运算符!=所以目前它没有给我带来任何问题。我无法正确获得字典中的+运算符,你知道为什么会发生这种情况吗?也许你需要为
编写一个
运算符==
?这行看起来有点奇怪
combined.dic.insert(combined.dic.end(),combined.dic.begin(),combined.dic.end())
您可能希望插入
dic
而不是
组合。dic
。谢谢!我没有使用map的原因是我们不允许将其用作此分配的容器。我们必须使用向量或字符数组。我将尝试对向量排序,然后调用unique并处理对==运算符。谢谢!