我尝试使用带拷贝分配的结构,但这给了我一些错误。
struct Data {
unsigned short xx;
unsigned short yy;
std::map<int, vector<int>> map;
bool operator<(....& rhs) const
{
......
}
bool operator==(....& rhs) const
{
return xx == rhs.xx && yy == rhs.yy;
}
Data& operator=(const Data& rhs) {
if (this != &rhs) {
xx = rhs.xx;
yy = rhs.yy;
for (int i = 0; i < 20; i++){
vector<int> temp;
vector<int> tempC = rhs.map[i];
for (int j = 0; j < tempC.size(); j++){
temp.push_back(tempC[j]);
}
map[i] = temp;
}
}
return *this;
}
};
错误消息:
Error: passing 'const std::map<int, std::vector<int> >' as 'this' argument discards qualifiers [-fpermissive]
那怎么了?
答案 0 :(得分:3)
违规行是
vector<int> tempC = rhs.map[i];
问题:std::map::operator[]
是非const
,因为如果给定键不存在任何值,它将插入一个值。但是您的rhs
是const
。您需要使用find
而不是[]
。
由于std::map
具有副本分配运算符,因此std::vector
也完全不需要整个循环。因此,实际上您可以按成员分配。或者,更好的是,按照注释中的建议进行操作,并实现复制和交换的习惯用法。