映射迭代器与运算符不匹配

Map iterator no match for operator

本文关键字:不匹配 运算符 迭代器 映射      更新时间:2023-10-16

>我在迭代器中与运算符不匹配map。当我尝试制作迭代器时,它指向映射 end-1。

#include <iostream>
#include <map>
int main()
{
std::map<char,int> mymap;
mymap['b'] = 100;
mymap['a'] = 200;
mymap['c'] = 300;
// show content:
for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end()-1; ++it){
std::cout << it->first << " => " << it->second << 'n';
}
return 0;
}

此语句

mymap.end()-1

仅对随机访问迭代器合法,但std::map::iterator是双向迭代器。如果要跳过最后一个元素,请使用std::prev()

for (std::map<char,int>::iterator it=mymap.begin(); it!=std::prev( mymap.end() ); ++it)

尽管总是计算它效率不高,但它应该是:

auto end = std::prev( mymap.end() );
for (auto it=mymap.begin(); it!=end; ++it) ...

请注意,要使其正常工作,您必须确保地图中至少有一个元素。如果您不想跳过最后一个元素,请完全删除-1

地图迭代器没有运算符,但这并不重要,因为如果您想显示所有内容,应该只是it!=mymap.end();