Просто чтобы добавить к предыдущим предложениям, если вы хотите, чтобы формат файла был легко читаемым и изменяемым, вы также можете использовать YAML . Он работает очень хорошо для вложенных диктовок и списков, но масштабируется и для более сложных структур данных (т.е. с участием пользовательских объектов), и его большой плюс в том, что формат читабелен.
В соответствии со стандартом C ++, раздел 23.1 / 11:
Если не указано иное (либо явно, либо путем определения функции в терминах других функций), вызывая контейнер Функция-член или передача контейнера в качестве аргумента для библиотечной функции не должна делать недействительными итераторы или изменять значения объектов в этом контейнере.
и раздел 25.3 «Сортировка и связанные операции» не указывает, что итераторы будут признаны недействительными, поэтому итераторы в вопросе должны оставаться действительными.