Как преобразовать элемент c++ std::list в итератор multimap

StackOverflow https://stackoverflow.com/questions/672729

Вопрос

У меня есть

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> >

Могу ли я как-то избежать создания временной мультикарты.Спасибо

Это было полезно?

Решение

Вам необходимо вставить пару ключ-значение в мультикарту, прежде чем получать для нее итератор.

Итератор не работает сам по себе.Если вы храните итераторы из нескольких разных мультикарт, вам, вероятно, потребуется хранить в списке не только итератор.

Возможно:

  1. а pair<multimap<std::string,std::string>::iterator, multimap<std::string,std::string>::iterator> где первый — итератор, а второй — конечный итератор.

  2. а pair<multimap<std::string,std::string>::iterator, multimap<std::string,std::string>*> где первый — итератор, а второй — указатель на мультиотображение, которому принадлежит итератор.

  3. какое-то другое решение.

РЕДАКТИРОВАТЬ:Я согласен с Николаем Голубевым:Хранить итераторы в течение длительного периода времени часто является плохой идеей, так как итераторы могут стать недействительными.

Другие советы

Вы не указали тип данных, которые храните в своем 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> > вместо.

Не храните итераторы.Используйте либо константные итераторы, либо лучший способ сохранить указатели на элементы на карте.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top