重载+;用于组合两个使用向量的字典的运算符 我是C++初学者,我试着想一想,我不能理解这些错误。
我需要做的是为我创建的名为Dictionary的类重载+运算符。Dictionary使用向量来存储键/值对,我在这里发布了一个类对:重载+;用于组合两个使用向量的字典的运算符 我是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
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()){
综合收益;
}
否则{
coutstd::unique
调用元素的操作符==
以确定元素是否相同。您需要为对定义操作符==
。错误消息甚至告诉您它正试图对两个对进行=
操作,但失败了
请注意,std::unique
仅删除连续的重复项。如果您的容器未排序(如果您将两个向量串联在一起),则您可能仍有未被此检查检测到的非连续重复项
使用排序容器,并进行排序合并而不是串联似乎是一个更好的主意。map
在这里似乎是一个更好的数据结构。听起来像map
比vector
更合适,至少对我来说是这样。当你检查它是相等的,不是不相等的。嗨,Joachim,我删除了运算符!=我仍然得到了相同的错误。我没有调用该运算符!=所以目前它没有给我带来任何问题。我无法正确获得字典中的+运算符,你知道为什么会发生这种情况吗?也许你需要为对编写一个运算符==
?这行看起来有点奇怪combined.dic.insert(combined.dic.end(),combined.dic.begin(),combined.dic.end())
您可能希望插入dic
而不是组合。dic
。谢谢!我没有使用map的原因是我们不允许将其用作此分配的容器。我们必须使用向量或字符数组。我将尝试对向量排序,然后调用unique并处理对==运算符。谢谢!