J'ai une carte définie comme celui-ciPourquoi ne puis-je pas mettre un itérateur sur la carte?
std::map<some_key_type, std::string::iterator> mIteratorMap;
Et une énorme chaîne nommée « mHugeString ». Ensuite, je marcher à travers la chaîne de collecte itérateurs comme ceci:
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;
}
En fin de compte je recevoir une carte, où un itérateur est associée à une certaine sorte de clé. Mais l'itérateur se perd en quelque sorte lorsqu'il est associé à une clé par "make_pair", à moins qu'il ne pointe vers un endroit à la fin d'une chaîne. C'est difficile à dire, mais peut-être que les 256 derniers octets sont bien. Donc, la question n'est pas de savoir comment éviter de perdre des itérateurs, c'était une idée stupide de les stocker de toute façon, mais pourquoi essayer de stocker un itérateur au début de la chaîne échoue, et pourquoi la même chose avec les itérateurs à la fin fonctionne bien? Quelle est la différence entre eux?
Comment conserver un itérateur? Est-ce 'mIteratorMap.insert (Carte :: value_type (key_of_a_right_type, It)), ou' 'mIteratorMap [key_of_a_right_type] = Il;'? – jfs
Pouvez-vous mettre à jour votre pseudo-code pour clarifier comment vous insérez dans la carte? Cela donne l'impression que vous construisez un temporaire mais ce n'est pas un appel ctor valide: if (need_to_store_an_iterator) mIteratorMap (key_of_a_right_type, It); –
Mon mauvais, l'a réparé. Mais l'insertion fonctionne de la manière d'économiser. Même en essayant simplement de faire une paire échoue. – akalenuk