linux hash_map,调用find(string)方法出错?

wesleyluo 2011-12-06 03:58:03
代码如下:

#include <string>
#include <ext/hash_map>

using namespace std;
using namespace __gnu_cxx;

int main(int argc, char** argv)
{
hash_map<string, float> hm;
hm.insert(pair<string,float>(string("aaa"), 2.9));

string tmp = "aaa";
hm.find(tmp); //这里报错了,hashtable.h:596 错误:xxxxxxxxx 调用没有匹配??????


return 0;
}


哪位大侠知道是怎么回事呢?
...全文
178 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wesleyluo 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qq120848369 的回复:]

linux没有hash_map,都是被淘汰的东西,在这里有个东西叫做unorderd_map.
[/Quote]

这两个区别是什么?
qq120848369 2011-12-06
  • 打赏
  • 举报
回复
linux没有hash_map,都是被淘汰的东西,在这里有个东西叫做unorderd_map.
qq120848369 2011-12-06
  • 打赏
  • 举报
回复
我一看头文件眼就瞎了。。。
「已注销」 2011-12-06
  • 打赏
  • 举报
回复
定义的时候这样:
hash_map<string, float,str_hash> hm;

记得把哈希函数加上
「已注销」 2011-12-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wesleyluo 的回复:]

引用楼主 wesleyluo 的回复:
代码如下:
C/C++ code

#include <string>
#include <ext/hash_map>

using namespace std;
using namespace __gnu_cxx;

int main(int argc, char** argv)
{
hash_map<string, float>……
[/Quote]

hash_map当时有扩展类型,如string类型时,应该指定 hash函数。
string类型一般使用:

struct str_hash{
size_t operator()(const string& str) const
{
unsigned long __h = 0;
for (size_t i = 0 ; i < str.size() ; i ++)
__h = 5*__h + str[i];
return size_t(__h);
}
};

或者系统定义的string哈希函数:
struct str_hash{
size_t operator()(const string& str) const
{
return return __stl_hash_string(str.c_str());
}
};
wesleyluo 2011-12-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 wesleyluo 的回复:]
代码如下:
C/C++ code

#include <string>
#include <ext/hash_map>

using namespace std;
using namespace __gnu_cxx;

int main(int argc, char** argv)
{
hash_map<string, float> hm;
hm.insert(pair<string,……
[/Quote]
试了下,在insert的地方也出错,感觉是不能调用hash_map的插入和查找方法,但是调用size()方法没问题;

23,114

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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