0
#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 个字符的原因),我遇到了很多冲突?

4

2 回答 2

4

const char*对键不好,因为您现在有指针比较而不是字符串比较(另外,您可能有悬空指针,的返回值c_str()不能长期使用)。

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

于 2012-06-05T14:29:25.573 回答
1

如果您的 key 是char*,那么您正在比较的不是字符串,而是指针,这使得您的 hashmap 的工作方式与您期望的不同。考虑使用const std::stringfor 键,因此它们使用字典顺序进行比较

于 2012-06-05T14:30:20.877 回答