Задача
Проблема может быть уменьшена до следующего случая:
#include <map>
int main(void) {
std::map<int, int> val;
auto it = val.begin();
it->first = 10;
}
Значения ключа в std::map
: const
(пара ключ и значение определены как std::pair<const Key, T>
), поэтому для
map<CStock, pair<unsigned, double>>
у нас есть map
, содержащий pair
s
std::pair<const CStock, pair<unsigned, double>>
, что составляет it->first
в
fromStream >> it->first >> it->second.first >> it->second.second;
a const CStock
и приводит к сообщенной ошибке.
Все это имеет смысл, потому что map
заказывается ключом, поэтому, если бы вы могли изменить ключ в любое время на то, что вы хотели, map
вскоре станет несогласованным.
Документация по std::map
Решение
Простого решения не существует. Ты не сможешь это сделать. Вы должны либо сделать элементы, а затем поместить их в map
или использовать одну из функций семейства emplace
, чтобы создать их непосредственно в map
. Когда они введены в map
, вы можете изменить значение, но не ключ. Вы можете удалить элемент и, следовательно, ключ, и заново вставить его с другим ключом, но почему вы делаете это в первую очередь? Я рекомендую переосмыслить вашу логику.