+ -
当前位置:首页 → 问答吧 → linux hash_map<string, double>,调用find(string)方法出错?

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

时间:2011-12-06

来源:互联网

代码如下:
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,float>(string("aaa"), 2.9));

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


  return 0;
}



哪位大侠知道是怎么回事呢?

作者: wesleyluo   发布时间: 2011-12-06

引用楼主 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,……

试了下,在insert的地方也出错,感觉是不能调用hash_map的插入和查找方法,但是调用size()方法没问题;

作者: wesleyluo   发布时间: 2011-12-06

引用 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>……


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

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哈希函数:
C/C++ code
struct str_hash{
        size_t operator()(const string& str) const
        {
                return return __stl_hash_string(str.c_str());
        }
};

作者: axengine   发布时间: 2011-12-06

定义的时候这样:
C/C++ code
hash_map<string, float,str_hash> hm;

记得把哈希函数加上

作者: axengine   发布时间: 2011-12-06