映射迭代器不匹配运算符

时间:2018-09-27 20:04:31

标签: c++ dictionary iterator

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;
}

2 个答案:

答案 0 :(得分:2)

此声明

mymap.end()-1

仅对Random Access Iterator合法,但std::map::iteratorBidirectional 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();