急问:hash_map的find用法

Efcndi 2008-02-04 01:31:33
我已经使用insert来构造了一个hash_map了。

现在需要去读hash_map的内容,但是key值是有重复的,

请教如何用一个iterator把同一个key值hash到的那个“bucket”全都读出来。

差不多应该是这个样子:
iterator it = map.find(key); //同一个key会对应多个数据项,所以要iterator来读。
这个iterator应该怎么写,如何枚举找到的数据项?

谢谢!
...全文
1690 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
soji 2008-04-24
  • 打赏
  • 举报
回复
如果key不同,insert时会把原有的值冲掉吧?
Efcndi 2008-02-04
  • 打赏
  • 举报
回复
用hash_multimap解决了。XX。
Efcndi 2008-02-04
  • 打赏
  • 举报
回复
我不太相信你有能力实现正确的hash函数。
--------------------------------------

why not?两年来我一直在做ACM算法竞赛题。^_^

不过以前用的hash模块都是自己写的,既不统一也容易出错,现在想改用模板库。

问题就是如何枚举find(key)找到的多个数据项?

一个简单的demo:
hash_map<int, string> map;
map.inster(pair<int, string>(0, "000"));
map.inster(pair<int, string>(1, "111"));
map.inster(pair<int, string>(1, "11"));
map.inster(pair<int, string>(1, "1"));

find(1); 如何把根据key=1把“1”、“11”、“111”一一枚举出来?
ltc_mouse 2008-02-04
  • 打赏
  • 举报
回复
找了个,不知道有没用:
multimap & hash_multimap
taodm 2008-02-04
  • 打赏
  • 举报
回复
如果程序对速度有很严格的要求,就应该优先考虑非hash的multimap。
我不太相信你有能力实现正确的hash函数。
Efcndi 2008-02-04
  • 打赏
  • 举报
回复
我这种情况用hash_map是可以的,只要把bucket设大一点就可以了。
note: “程序对速度有很严格的要求,即要求速度越快越好”

应该使用hash_multimap?

请教大家如何根据key来查找并枚举数据项,LZ的各位再解释得清楚些?谢谢。
Supper_Jerry 2008-02-04
  • 打赏
  • 举报
回复
在容器中不包含key值时,insert函数和[]操作符的功能差不多。但是当容器中元素越来越多,每个桶中的元素会增加,为了保证效率,hash_map会自动申请更大的内存,以生成更多的桶。因此在insert以后,以前的iterator有可能是不可用的。
http://blog.csdn.net/gzblog/archive/2008/01/20/2054354.aspx
taodm 2008-02-04
  • 打赏
  • 举报
回复
hash_multimap equal_range接口
strangefay 2008-02-04
  • 打赏
  • 举报
回复
楼上正解~~~
strangefay 2008-02-04
  • 打赏
  • 举报
回复
楼上正解
ltc_mouse 2008-02-04
  • 打赏
  • 举报
回复
现在需要去读hash_map的内容,但是key值是有重复的

-------------------------
insert之后,hash map中不该含有重复的key值吧? 不然,就不叫key了吧...
babyvox1999 2008-02-04
  • 打赏
  • 举报
回复
t_map_lines::iterator it;
it = m_lines.find(nLine);
if (it == m_lines.end())
{
查找失败;
return false;
}

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧