我是靠谱客的博主 背后眼睛,最近开发中收集的这篇文章主要介绍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++ STL map容器倒序遍历时读取到没有插入的元素问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部