一个hash_map使用错误
g++的 hash_map 运行不起来
#include <string>#include <ext/hash_map>using namespace std;using namespace __gnu_cxx;namespace __gnu_cxx{ template<> struct hash<const string> { size_t operator()(const string& s) const { return hash()(s.c_str()); } }; template<> struct hash<string> { size_t operator()(const string& s) const { return hash()(s.c_str()); } };}int main( void ){ hash_map<string,int> a; a["abc"] = 1; // 这一句一执行的话,程序直接退出 system("pause");} 该段代码由
周星星 贴于
http://blog.vckbase.com/jzhang/archive/2006/03/28/18807.html试运行,确实会崩溃。
经debug跟踪,很快就能找到错误来源。
原来是
template<> struct hash<string>::operator()(const string &)定义成了无穷递归。
如下修正:
template<> struct hash<string> { size_t operator()(const string& s) const { return __stl_hash_string(s.c_str()); } }; 发表于 @ 2006年07月20日 16:44:00|评论(loading...)