Почему я не могу инициализировать ключевое поле карты (it-> first = s не
работа) но второе поле работает? И каково решение?
У вас есть ответ на сам вопрос. std::map
сопоставляет ключ со значением. Это означает, что во время самого создания вам нужно установить и ключ (и значение).
it->first=s;
Это не скомпилируется, потому что вы не упомянули, для чего нужен ключ.
it->second=s;
Это UB. Так как вы не упомянули ключ с ним.
std :: map - это отсортированный ассоциативный контейнер, содержащий значение ключа
пары с уникальными ключами. Ключи отсортированы с помощью сравнения
Функция сравнения.
Следовательно, для того, чтобы сделать сравнение и поставить правильную позицию в структуре данных, ему нужны обе информации вместе.
Решения:
mapa[key] = value;
с использованием (operator[])
. Вы можете использовать то же самое для доступа к значениям на карте напрямую по соответствующему ключу.
mapa.emplace("key", "value");
mapa.insert ( std::pair<std::string, std::string>("key", "value") );
mapa.insert ( std::make_pair("key", "value") );
std::map<std::string,std::string>::iterator it(mapa.begin());
mapa.insert (it, std::pair<std::string, std::string>("key", "value"));