1

MyClass自明ではない内部状態を定義operator==して持っていwstring toString()ますが、その状態のシリアル化されたバージョンを返すメソッドを提供します。なのでonだけで使いやすいtoString()と思いました。hash<wstring>std::unordered_set

しかし、余分なファンクタークラスを定義せずに、きちんとした方法でこれを行うことは可能ですか? 私は VS2013 に移行した後、C++11 に慣れてきたばかりで、ラムダなどを定義できるようになったことは大きな前進の 1 つだと思いました。

これを行う最善の方法を提案していただきありがとうございます。

4

2 に答える 2

0

最善のアプローチは、特殊std::hash化によってハッシュする方法を伝えることです。MyClass

namespace std {
template <>
struct hash<MyClass> {
  std::size_t operator () (const MyClass& mc) const {
    return std::hash<std::wstring>()(mc.toString());
  }
};
} // namespace std

unordered_setそのため、またはのデフォルト以外のテンプレート パラメータを気にする必要はありませんunordered_map

于 2014-10-09T16:54:03.070 に答える