我已經創建std::unordered_map<CGPoint, unsigned int>
,顯然,使它工作,我應該爲它編寫的散列函數:重載ObjC結構的C++無序容器哈希支持
namespace std {
template<> struct hash<CGPoint> {
inline size_t operator()(const CGPoint & v) const {
size_t seed = 0;
::hash_combine(seed, v.x);
::hash_combine(seed, v.y);
return seed;
}
};
};
但它沒有編制,而且我發現有是一個平等運營商應該定義的地方。所以我已經將以下代碼寫入模板結構中。
friend bool operator==(const CGPoint& p1, const CGPoint& p2) {
return (p1.x == p2.x) && (p1.y == p2.y);
}
但它不斷拋出異常:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:659:21: 無效操作數的二進制表達式( 'const的CGPoint' 和 'const的 CGPoint')
和:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__hash_table:1993:32: 沒有用於調用類型爲'key_equal'的對象的匹配函數(又名 '的std :: __ 1 :: __ unordered_map_equal, 的std :: __ 1 :: equal_to,真>「)
最有可能的,我失去了一些東西很簡單,但因爲它通常會發生,我無法得到它。提前致謝。
您是否嘗試過提供一個版本的''==這需要'常量CGPoint's而不是'常量CGPoint及單曲? – jtbandes
它不工作。一旦你爲(&v)和(v)定義了func,函數調用就會變得模糊不清,因爲它們提供了相同的選項。它只會增加一些錯誤。 –
這不是「拋出異常」。 –