簡體   English   中英

C ++ 11中的hash_value函數

[英]hash_value function in C++11

Boost庫提供了一個方便函數hash_value ,它基本上只調用:

return hash<T>()(key);

據我所知,C ++ 11包含std::hash ,它與boost::hash非常相似,但不包括std::hash_value 這需要應用程序代碼創建一個hash對象並調用它的operator()而不是只調用一個方便的函數。 有沒有什么理由說std::hash_value沒有標准化?

std::hash<T>函數的主要用途是用於從std::unordered_*容器組中的鍵獲取哈希值的對象。 這些將始終包含和使用相應的對象,可能使用空基本優化來避免占用任何內存。 在任何情況下,只要使用std::hash<T>類型,實際上就是一個對象。

雖然功能對象可以單獨使用,但可能很少見。 此外,對於其他類似的現有函數對象,沒有相應的便捷調用函數:雖然它們中的大多數都是運算符的包裝器,但是特別是std::less<void*>可能很有趣,因為你不能使用ptr1 < ptr2來獨立調用ptr1 < ptr2 (至少,如果ptr1ptr2不屬於同一個數組對象,則無法在C ++ 03中使用)。 也就是說,沒有合適的優先權。

最后,我猜想方便功能根本不是提案的一部分:如果沒有提出並且沒有真正好的案例,那么C ++標准中就不會包含任何內容。 從它的外觀來看, n1456似乎至少是“哈希表”提案的一個修訂版,它不包括std::hash_value<T>()的痕跡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM