我是靠谱客的博主 背后眼睛,这篇文章主要介绍C++ STL map容器倒序遍历时读取到没有插入的元素问题,现在分享给大家,希望可以做个参考。

问题描述

今天做项目需要用到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++内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(136)

评论列表共有 0 条评论

立即
投稿
返回
顶部