我可以用我自己定義的C++ 11中的std::hash
替換std::hash
的實際實現嗎?我可以重寫std :: hash嗎?
我的意思是從我的代碼庫,沒有觸及標準庫。
在這種情況下,我看不到虛擬函數/多態的任何用途,所以我想我不能改變std :: hash的定義嗎?
我可以用我自己定義的C++ 11中的std::hash
替換std::hash
的實際實現嗎?我可以重寫std :: hash嗎?
我的意思是從我的代碼庫,沒有觸及標準庫。
在這種情況下,我看不到虛擬函數/多態的任何用途,所以我想我不能改變std :: hash的定義嗎?
是沒關係的,你不必修改標準庫以任何方式,只要使用模板特:
namespace std
{
template<>
struct hash<YourSpecialType>
{
// ...
};
}
這對我自己的類型是微不足道的,我的意思是全球的作品... – user2485710
@ user2485710啊,那麼沒有。然後你有叉標準庫。 –
這就是我的想法,無論如何感謝 – user2485710
namespace std {
template <> struct hash<Foo>
{
size_t operator()(const Foo & x) const
{
/* your code here, e.g. "return hash<int>()(x.value);" */
}
};
}
如果你認爲你可以做得比庫實現者你是現有版本孰優孰劣 1.錯誤 或 2.聰明
_3。 lazy_,所以我可以在不寫X新類型的情況下得到一個新的散列函數。 – user2485710
「X新類型」?只需編寫一個myHash函數並使用它,但這可能不是懶惰 - 您必須先閱讀Knuth數小時才能找到正確的答案。 – doctorlove
懶惰的部分確實是關於「寫作」的:D,但是要感謝提及Tex和其他算法和書籍的創造者。 – user2485710
您可以爲*您的*自己的類型專業化。 – Xeo
@Xeo是的,我知道,但我對全球變化感興趣。 – user2485710
可能重複[如何專門化std :: hash ::運算符()用於無序容器中的用戶定義類型?](https://stackoverflow.com/questions/8157937/how-to-specialize-stdhashkeyoperator-for用戶定義的類型在無序) –