_bstr_t キー タイプの順序付けられていないマップがあります。したがって、このキー タイプはデフォルトではハッシュ関数でサポートされていないため、ファンクタを定義しました。
struct KeyHash {
size_t operator()(const _bstr_t& key) const {
return hash<LPCTSTR>()(key);
}
};
次に、typedef を定義しました。
typedef unordered_map<_bstr_t, RecentInfo*, KeyHash> RecentInfoMap;
そして、問題が発生します:RecentInfoMapをデフォルトのコンストラクターでインスタンス化すると
RecentMapInfo rim;
その後、すべて正常に動作します。しかし、RecentInfoMap を初期バケット数でインスタンス化したい場合
RecentInfoMap rim(100);
その後、マップが機能しません。キーで値を取得できません。また、マップを使用する前に rim.rehash(100) を呼び出すと、機能しません。
私が間違っていることを説明してください。
更新: いくつかのコード例:
unordered_map<bstr_t, int, KeyHash> map;
_bstr_t t1("ORCL");
_bstr_t t2("ORCL");
map[t1] = 777;
map[t2] = 555;
fout << map[t1] << endl;
fout << map[t2] << endl;
すべて問題ありません: map[t1] と map[t2] は 1 つの値 555 を参照します。しかし、map が次のように定義されている場合
unordered_map<bstr_t, int, KeyHash> map(100);
次に、エラーがあります: map には重複したキーが含まれており、map[t1] は 777 を参照し、map[t2] は 555 を参照しています。
このステートメント (rehash 呼び出しを使用) も重複キーを提供します。
unordered_map<bstr_t, int, KeyHash> map;
map.rehash(100);