hash_map无法正常工作

时间:2012-06-05 14:26:42

标签: c++ hashmap

#include <ext/hash_map>

using namespace std;

class hash_t : public __gnu_cxx::hash_map<const char*, list<time_t> > { };
hash_t hash;

...

我在使用这个hash_map时遇到了一些问题。使用作为键的const char * im始终是12长度的数字,格式为58412xxxxxxx。我知道有483809个不同的数字,所以插入一切后应该是hash_map大小,但我只得到193个条目。

hash_t::iterator it = hash.find(origen.c_str());
if (it != hash.end()) { //Found

    x++;
    (*it).second.push_front(fecha);         
}
else { //Not found

    y++;
    list<time_t> lista(1, fecha);
    hash.insert(make_pair(origen.c_str(), lista));          
}  

使用python词典完全相同的程序(我得到了正确的条目数),但是使用c ++甚至没有关闭。是否有可能因为每个键都以58412开头(实际上几乎每个键,但不是全部键,这就是我不想砍掉这5个字符的原因),我会遇到很多冲突?

2 个答案:

答案 0 :(得分:4)

const char*对于一个键是不好的,因为你现在有指针比较而不是字符串比较(同样,你可能有悬空指针,c_str()的返回值不可用于长期)

改为使用hash_map<std::string, list<time_t> >

答案 1 :(得分:1)

如果您的密钥是char*,那么您不会比较字符串,而是指针,这会使您的hashmap的工作方式与您预期的不同。考虑使用const std::string作为键,因此使用词典排序

进行比较