ユーザー定義型の std::hash
ユーザー定義の順序付けされていないコンテナーを利用するにはstd::unowned_set
C 標準を含むさまざまなリソースを調査すると、次のことが可能であることが明らかになります。 std::hash
namespace std { template <> inline size_t hash<X>::operator()(const X& x) const { return hash<int>()(x.id); } }
ここで、提起された質問に答えてみましょう。
1.特殊化の合法性
std 名前空間への特殊化の追加は許可されているだけでなく、推奨されています。これにより、ユーザー定義型をサポートする標準機能の拡張が可能になります。
2.準拠バージョンの std::hash
std::hash
namespace std { template <> struct hash<X> { size_t operator()(const X& x) const { // Your custom hash function implementation } }; }
3.移植可能なソリューション
前に示した std::hash の特殊化には C 11 との互換性が必要ですが、コンパイラによって汎用的にサポートされていない可能性があります。移植性を高めるには、非標準の名前空間の使用を検討してください。例:
namespace ht { template <> struct hash<X> { // Your custom hash function implementation }; }
以上がC でカスタム型の `std::hash::operator()` を特殊化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。