最近工作项目中,开发一个功能模块,需要将字符串中的数据提取到容器中进行处理,但是在处理过程中,遇到这样的问题,获取map容器中的最后一个元素,但是却不是预期想要的数据。
做程序开发的人,都知道map容器是自动排序的,但是随着时间,会慢慢忘记这个特性,导致出现问题去分析的时候,才突然记起,从而造成不必要的时间浪费。因为,本文将处理问题的方法进行梳理总结。
首先,要解决map容器自动排序,可能会先想到是否有无排序的map容器,当然是有的,即std::unordered_map,话不多说,先验证是否可行。代码内容如下所示,存储四个数据到unordered_map,然后从头到尾遍历容器,并且将最后一个元素保存下来。
输出的打印信息如下,从中可以看出unordered_map既不是按照输入的顺序存储,也不是自动排序存储
那么如何解决呢?在解决之前,先了解下向量vector和映射表map获取容器最后一个元素的方法。
向量vector获取最后一个元素,可以通过back函数获取。
最后输出的结果如下,说明通过函数back获取最后一个元素是正确的。
接下来了解map容器获取最后一个元素的方法,通过rebgin来获取,另外first可以获取键值,second则可以获取对应的值。
最后输出的打印信息如下,可以看出map容器是有序容器,获取的最后一个元素是已经排序之后的元素。
现在,我们再来看看,怎么解决上面的问题,可以结合vector和pair来处理。先构建向量数据,首先创建pair类型变量,并存储数据,然后再添加到vector向量中,最后获取向量最后的元素内容,并打印出来,确认是否正确。经验证是正确的。
另外,如果存储的数据不是键值对的形式,并且数据量比较大,那么可以通过构建自定义结构体,并将结构体变量存储到向量。
至此,已经将解决过程和最终的处理方法说清楚了。最后再来总结下内容,vector向量通过back获取最后一个元素、map容器通过rbegin获取最后一个元素,unordered_map获取最后一个元素需要遍历并存储最后一个元素,结合vecor和pair可以解决map容器自动排序和unordered_map无序的问题。