2015-05-24 357 views

回答

16

unordered_*容器需要散列函數。默認情況下,它們使用std::hash,但是在標準庫中提供的std::pair<T1,T2>沒有專門的std::hash。另一方面,訂購的集裝箱依賴於std::less(默認)和std::pair確實operator<提供。這就是爲什麼它正常工作。

爲了有一個pair一個無序的容器,你必須提供一個散列函數對象自己。例如:?

struct SimpleHash { 
    size_t operator()(const std::pair<int, int>& p) const { 
     return p.first^p.second; 
    } 
}; 

std::unordered_set<std::pair<int, int>, SimpleHash> S; 
S.insert(std::make_pair(0, 1)); 
+0

會S.emplace(...也行,如果沒有,你會改變什麼 – HeinrichStack

+1

@Barry可以p.first^p.second得到不同對像P_A相同的值, P_B? – olivia

+1

@olivia當然,這肯定會給你的'相同的值(A,b)'和'(b,A)',它並非是一個完美的哈希函數,只是一個簡單的例子。 – Barry

0

您需要爲配對提供散列函數。

相關問題