То, что вы сейчас делаете, это:
Скажем, у вас есть 1000000 записей в файле.Вы читаете весь файл в std :: map, это занимает около 1000000 операций.Вы используете find / insert для поиска и / или вставки элемента, это занимает логарифмическое время (около 20 сравнений).И теперь вы снова сохраняете весь файл, передавая все эти 1000000 записей обратно в файл.
Проблема в том, что вы абсолютно ничего не получаете от использования std :: map.std :: map дает вам быстрое время поиска (логарифмическое), но инициализация и сериализация всей карты для каждого поиска сводит на нет его преимущества.
Вам нужно либо перепроектировать свою программу, чтобы загрузить карту один раз взапустить и сериализовать его один раз в конце.Или, возможно, если вам нужна семантика базы данных, перейдите к реальной реализации базы данных.Я предлагаю использовать SQLite, хотя LevelDB может быть вам полезен.