【发布时间】:2009-02-05 16:28:38
【问题描述】:
我有一张这样定义的地图
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;? -
您能否更新您的伪代码以阐明您是如何插入到地图中的?这使它看起来像您正在构建一个临时的,但它不是一个有效的 ctor 调用: if(need_to_store_an_iterator)mIteratorMap(key_of_a_right_type, It);
-
我的错,修好了。但是插入是保存方式。即使只是尝试配对也失败了。
-
简短的回答是您可以将迭代器存储在地图中。但是如果没有一些工作代码来解决问题,就不可能诊断出问题。
标签: c++ string stl map iterator