概述
问题描述
今天做项目需要用到map容器,我使用mp.insert(make_pair(abs(val(i)),i));的方式插入数据(mp为map<double,int>对象),然后使用for (map<double, int>::iterator iter = mp.end(); iter != mp.begin(); --iter)的方式遍历map的所有元素,可是遍历过程中,发现出现了一个之前没有插入过的元素,同时一个之前插入过的元素不见了,并且之前没有插入过的元素键值最大,之前插入却不见的元素键值最小。
解决方案
我把遍历map的方式修改为从前往后,即for (map<double, int>::iterator iter = mp.begin(); iter != mp.end(); ++iter)则问题解决。
所以个人猜测,可能是遍历从mp.end()开始,而mp.end()其实是不保存元素的,所以读取该值的话可能会读取一个随机值(也可能是一个默认值),而之前插入的元素键值最小的元素不见是因为mp.insert(make_pair(abs(val(i)),i));是根据键值来排序的,键值最小的元素在mp.begin()中,而之前的遍历方式的循环终止条件是iter == mp.begin(),当满足这个条件则直接跳出循环,所以访问不到该元素。
所以解决方案就是换为顺序遍历,如果一定要逆序遍历,可以使用下面的方式
map<double, int>::iterator iter = mp.end();
iter–;
for (; ; --iter){};
最后
以上就是背后眼睛为你收集整理的C++ STL map容器倒序遍历时读取到没有插入的元素问题的全部内容,希望文章能够帮你解决C++ STL map容器倒序遍历时读取到没有插入的元素问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复