Hash-Funktion für ein Paar lange lang?

Ich brauche die Karte ein paar long long zu einem doubleaber ich bin mir nicht sicher, was hash-Funktion zu verwenden. Jedes paar besteht aus zwei zahlen, obwohl Sie in der Praxis wird in der Regel zahlen zwischen 0 und über 100 (aber auch das ist nicht garantiert).

Hier ist die tr1::unordered_map Dokumentation. Ich begann so:

typedef long long Int;
typedef std::pair<Int, Int> IntPair;

struct IntPairHash {
  size_t operator(const IntPair& p) const {
    return ...; //how to hash the pair?
  }
};

struct IntPairEqual {
  bool operator(const IntPair& a, const IntPair& b) const {
    return a.first == b.first 
      && a.second == b.second;
  }
};

tr1::unordered_map<IntPair, double, IntPairHash, IntPairEqual> myMap;

Im Allgemeinen, ich bin mir nie sicher, was hash-Funktion zu verwenden. Was ist ein guter Allzweck-hash-Funktion?

InformationsquelleAutor der Frage | 2009-04-10

Schreibe einen Kommentar