У меня есть карта, определенная как этотПочему я не могу поставить итератор на карту?
std::map<some_key_type, std::string::iterator> mIteratorMap;
и огромная строка с именем «mHugeString». Тогда я иду корыто строки сбора итераторов, как это:
std::string::iterator It=mHugeString.begin();
std::string::iterator EndIt=mHugeString.end();
for(;It!=EndIt;++It){
...defining a key element...
if(need_to_store_an_iterator)mIteratorMap[key_of_a_right_type]=It;
}
В конце концов, я должен делат карты, где итератор, связанная с каким-то ключом. Но итератор как-то теряет себя при соединении с ключом «make_pair», если только он не указывает на место где-то в конце строки. Трудно сказать, но, может быть, последние 256 байтов в порядке.
Итак, вопрос заключается не в том, как избежать потери итераторов, но это была глупая идея хранить их в любом случае, но почему попытка сохранить итератор в начале строки терпит неудачу и почему то же самое с итераторами на конце работает отлично? В чем разница между ними?
Как хранить итератор? Это 'mIteratorMap.insert (Map :: value_type (key_of_a_right_type, It));' или 'mIteratorMap [key_of_a_right_type] = It;'? – jfs
Можете ли вы обновить свой псевдокод, чтобы уточнить, как вы вставляете карту? Это делает его похожим на то, что вы создаете временный, но это недействительный вызов ctor: if (need_to_store_an_iterator) mIteratorMap (key_of_a_right_type, It); –
Плохо, исправлено. Но вставка работает сэкономить. Даже просто попытка сделать пару не удалась. – akalenuk