#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个字符的原因),我会遇到很多冲突?
答案 0 :(得分:4)
const char*
对于一个键是不好的,因为你现在有指针比较而不是字符串比较(同样,你可能有悬空指针,c_str()
的返回值不可用于长期)
改为使用hash_map<std::string, list<time_t> >
。
答案 1 :(得分:1)
如果您的密钥是char*
,那么您不会比较字符串,而是指针,这会使您的hashmap的工作方式与您预期的不同。考虑使用const std::string
作为键,因此使用词典排序