#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 は、常にこの形式 58412xxxxxxx の 12 の長さの数値です。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 文字を切り刻みたくない理由です)、多くの衝突が発生する可能性はありますか?