Chinaunix首页 | 论坛 | 博客
  • 博客访问: 577625
  • 博文数量: 158
  • 博客积分: 4380
  • 博客等级: 上校
  • 技术积分: 2356
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-21 10:45
文章分类

全部博文(158)

文章存档

2012年(158)

我的朋友

分类: C/C++

2012-11-19 11:28:07

map::rbegin的一个注意点

在上请教如何取得map的最后一个元素,给出了两个方法:
a.
    itor = m.end();
    *( --itor );
b.
    *( m.rbegin() );
(BTW:不知道哪个更好?其实我觉得都不好,不知道有没有更好的办法?)

七猫说使用……时需要确保!m.empty(),这句话提醒了我,于是写个代码测试一下:
    map a;
    cout << a.begin()->first << endl;
    a.rbegin()->first;
发现 a.begin()->first 是一个无效值(很合理),而 a.rbegin()->first 在VC++6.0中导致死循环,在dev-cpp4992中导致访问非法地址异常而退出。
阅读(2009) | 评论(8) | 转发(0) |
给主人留下些什么吧!~~

网友评论2012-11-19 11:30:24

msmouse
VC7.1里面rbegin也是无效值了

网友评论2012-11-19 11:30:12

swest
map是有顺序的,按key排序,用iterator遍历时就是这样。
我最近也在用stl的map,有一点非常重要:永远不要让iterator越界。

网友评论2012-11-19 11:29:57

hayate
ilovevc正解!

网友评论2012-11-19 11:29:42

starlight
我想是因为set,和map更侧重于一个集合的概念,而不是顺序的概念。物理地址上也不是有序存放的。 back函数没有什么意义的原因吧。  

-----------

进一步讲, 就是散列存放的表(散列表), 用于快速查找...

网友评论2012-11-19 11:29:29

ilovevc
set, map 都是关联容器,内建排序规则,back返回最后一个元素没有实际意义。