我是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检测到错误。
我可以就如何解决这个问题并解决这个问题提出一些建议吗?非常感谢你!
答案 0 :(得分:1)
std::unique
调用元素operator==
来判断元素是否相同。您需要为operator==
定义Pair
。该错误消息甚至会告诉您它正在尝试在==
上执行Pair
并失败。
请注意std::unique
仅删除连续重复项。如果您的容器未分类(如果您将两个向量连接起来将是这样),那么您可能仍然有此检查未检测到的非连续重复项。
使用已排序的容器似乎是一个更好的主意,并执行排序合并而不是连接。 map
似乎是一个更好的数据结构。