unordered_map :: find with key std :: Zeigerpaar mit benutzerdefinierten Hash-Abstürzen in VS2012
Ich brauchte einstd::unordered_map
mit Taste astd::pair<T*, T*>
Also habe ich den folgenden Code "gestohlen":
template <class T>
inline void hash_combine(std::size_t & seed, const T & v)
{
std::hash<T> hasher;
seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
}
namespace std
{
template<typename S, typename T> struct hash<pair<S, T>>
{
inline size_t operator()(const pair<S, T> & v) const
{
size_t seed = 0;
::hash_combine(seed, v.first);
::hash_combine(seed, v.second);
return seed;
}
};
}
von diesem StapelüberlaufAntworte.
Es funktioniert wie ein Zauber auf Linux-Rechnern mit gcc 4.9.2. In Windows Visual Studio 2012 stürzt es jedoch ab, wenn die Member-Funktion @ aufgerufen wirfind()
von meinenunordered_map
. Ein Freund von mir hat den Absturz auf einem Windows-Computer behoben und berichtet, dass er nur im Debug-Kompilierungsmodus funktioniert, indem er "Vektor-Index außerhalb des gültigen Bereichs" angibt.
std::pair<T*, T*>
? Gibt es eine robustere / bessere Art, ein @ zu haschestd::pair<T*, T*>
?Was verursacht dieses seltsame Verhalten?P.S: Es tut mir sehr leid, dass ich kein @ gepostet hab mcve aber das ist unmöglich.