私はunordered_mapを別のunordered_mapをキーとして使用しようとしています(カスタムハッシュ関数)。おそらく必要ではないにしても、カスタム等価関数を追加しました。C++ unordered_mapここでkeyもunordered_map
コードは私が期待していることをしませんが、私は何が起こっているのか頭や尻尾を作ることはできません。なんらかの理由で、find()を実行してもequal関数は呼び出されません。これは私が期待しているものです。 ==
を使用して2つのstd::unordered_map
オブジェクトの比較
unsigned long hashing_func(const unordered_map<char,int>& m) {
string str;
for (auto& e : m)
str += e.first;
return hash<string>()(str);
}
bool equal_func(const unordered_map<char,int>& m1, const unordered_map<char,int>& m2) {
return m1 == m2;
}
int main() {
unordered_map<
unordered_map<char,int>,
string,
function<unsigned long(const unordered_map<char,int>&)>,
function<bool(const unordered_map<char,int>&, const unordered_map<char,int>&)>
> mapResults(10, hashing_func, equal_func);
unordered_map<char,int> t1 = getMap(str1);
unordered_map<char,int> t2 = getMap(str2);
cout<<(t1 == t2)<<endl; // returns TRUE
mapResults[t1] = "asd";
cout<<(mapResults.find(t2) != mapResults.end()); // returns FALSE
return 0;
}
ハッシュ関数が2つのマップに対して返すものを見てください。 – Caleth