Я полагаю, что большая часть вашего времени выполнения с картой копирует строки. std::map
любит иметь свою собственную копию всего. Поэтому, когда вы вставляете, std::map
делает копию ключа и значения.
Давным-давно, когда процессоры работали медленно, а памяти было мало, программисты использовали указатели для «больших» элементов данных и передавали указатель, а не копировали данные каждый раз. Указатель - это объект намного меньшего размера, чем строка, и для его копирования требуется меньше времени выполнения. Возможно, вам следует хранить указатели на строки на карте:
#include <map>
#include <string>
#include "boost/shared_ptr.hpp"
typedef boost::shared_ptr<string> Shared_Str_Ptr;
typedef std::map< DWORD, Shared_Str_Ptr> Map_Container;
//...
Map_Container my_map;
Shared_Str_Ptr p_str(new std::string("Hello"));
my_map[5] = p_str;
shared_ptr позаботится об управлении памятью, чтобы не беспокоиться об удалении карты или ее содержимого.
См. Также Повышение интеллектуальных указателей .