Как преобразовать элемент c++ std::list в итератор multimap
Вопрос
У меня есть
std::list<multimap<std::string,std::string>::iterator> >
Теперь у меня есть новый элемент:
multimap<std::string,std::string>::value_type aNewMmapValue("foo1","test")
Я хочу избежать необходимости установить Temp MultiMap и сделать вставку в новый элемент, чтобы вернуть его итератор, чтобы я мог перенести его обратно к:
std::list<multimap<std::string,std::string>::iterator> >
Могу ли я как-то избежать создания временной мультикарты.Спасибо
Решение
Вам необходимо вставить пару ключ-значение в мультикарту, прежде чем получать для нее итератор.
Итератор не работает сам по себе.Если вы храните итераторы из нескольких разных мультикарт, вам, вероятно, потребуется хранить в списке не только итератор.
Возможно:
а
pair<multimap<std::string,std::string>::iterator, multimap<std::string,std::string>::iterator>
где первый — итератор, а второй — конечный итератор.а
pair<multimap<std::string,std::string>::iterator, multimap<std::string,std::string>*>
где первый — итератор, а второй — указатель на мультиотображение, которому принадлежит итератор.какое-то другое решение.
РЕДАКТИРОВАТЬ:Я согласен с Николаем Голубевым:Хранить итераторы в течение длительного периода времени часто является плохой идеей, так как итераторы могут стать недействительными.
Другие советы
Вы не указали тип данных, которые храните в своем list
.В любом случае, предполагая, что вы хотите добавить значения, на которые указывает определенный ключ, вы можете вызвать list.insert(*mapIter)
.
multimap<std::string,std::string>::value_type aNewMmapValue("foo1","test")
Вам нужно добавить это в свою мультикарту через map.insert
.Эта функция возвращает итератор.Затем вы можете безопасно добавить этот итератор в свой список.
std::list<multimap<std::string,std::string>::iterator> yourlist;
// ....
multimap<std::string,std::string>::iterator itr =
yourmultimap.insert(aNewMmapValue);
yourlist.insert(itr);
Тип std::multimap<std::string,std::string>::iterator
является итератором для std::pair<const std::string, std::string>
хранится в std::multimap.Если элемент не хранится в мультикарте, на него нельзя ссылаться через итератор мультикарты.
Вы можете хранить, используя std::list<std::pair<std::string,std::string> >
вместо.
Не храните итераторы.Используйте либо константные итераторы, либо лучший способ сохранить указатели на элементы на карте.