Прежде чем углубляться в какие-либо подробности, пожалуйста, не делайте никаких оптимизаций, подобных этим, если только вы не уверены, что стоимость изготовления копий настолько велика, что вам нужно ее решить.Иметь строки в качестве ключей - это хорошо и интуитивно понятно, а код, необходимый для его избежания, немного сложен.
Использование unique_ptr в качестве ключа на карте действительно можно заставить работать, но я действительно не думаю, чтоэто хорошая идея.Это будет означать, что для запроса ключа на карте вам понадобится строка, которая будет использоваться в качестве ключа, в виде unique_ptr.Это означает, что если вы не сохраняете все свои строки как unique_ptrs, вам нужно будет сделать копию каждой строки, которую вы хотите найти.Поскольку вставки, как правило, встречаются гораздо реже, чем поиск, это, по-видимому, оптимизирует необычный случай за счет общего.Я настоятельно рекомендую вам не делать этого.
Если вы действительно хотите избавиться от ненужного копирования, вы можете вместо этого выбрать вариант реализации строки, которая выполняет копирование при записи.Таким образом, стоимость создания копии строки составляет O (1), и две копии, сделанные во время вставки, будут дешевыми.Это, вероятно, потребует от вас использования этой строковой реализации в другом месте и быть осторожным с проблемами многопоточности, но она может работать, если вы хотите.