在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;
}
答案 0 :(得分:2)
此声明
mymap.end()-1
仅对Random Access Iterator合法,但std::map::iterator
是Bidirectional 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
。
答案 1 :(得分:0)
没有用于地图迭代器的运算符,但这没关系,因为如果要显示所有内容,则应该只是it!=mymap.end();