Я попытался создать структуру с назначением копирования, но это дало мне некоторую ошибку.
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]
так что не так?
Оскорбительная линия
vector<int> tempC = rhs.map[i];
Проблема: std::map::operator[]
не является const
, потому что он вставляет значение, если для данного ключа его не существует. Но ваш rhs
есть const
. Вам нужно использовать find
вместо []
.
Весь цикл также совершенно не нужен, поскольку у std::map
есть копирующий оператор присваивания, как и у std::vector
. Таким образом, вы можете на самом деле просто назначать членов. Или, что еще лучше, сделайте, как было предложено в комментариях, и реализуйте идиому копирования и замены.
Судя по показанным переменным-членам, есть хорошие шансы, что спрашивающий может вызвать Правило нуля и оставить все на усмотрение компилятора.
Не решает вашу проблему напрямую, но Что такое идиома копирования и замены? может вам пригодиться.