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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (93)

我在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;
}
提问于
用户回答回答于

对于地图迭代器没有运算符,但是没关系,因为如果要显示所有内容应该只是 it!=mymap.end();

用户回答回答于

这个说法

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完全删除。

所属标签

可能回答问题的人

  • uncle_light

    5 粉丝518 提问8 回答
  • 嗨喽你好

    7 粉丝480 提问8 回答
  • 人生的旅途

    10 粉丝484 提问7 回答
  • 无聊至极

    4 粉丝504 提问6 回答

扫码关注云+社区

领取腾讯云代金券