tr1::unordered_map mit zeigern
-
Hallo ihr,
ich habe ein Programm geschrieben, dass eine tr1::unordered_multimap verwendet.
Aber ich habe das Gefühl, dass das Matching (in Form von find und equal_range) nicht funktioniert. Hier der kleinste Code wo das auftritt:#include <iostream> #include <tr1/unordered_map> using namespace std; using std::tr1::unordered_multimap; struct inthash { size_t operator () (int* n) const { size_t seed = long(n) % 2; return seed; } }; typedef unordered_multimap<int*, int, inthash> mm; int main() { mm h; int* i1 = new int(3); h.insert(make_pair(i1, 3)); int* i2 = new int(5); cout << i1 << " " << i2 << endl; std::pair<mm::const_iterator, mm::const_iterator> p = h.equal_range(i2); if (p.first == h.end()) { cout << "no matching\n"; } else { cout << "found matching\n"; } return 0; }Ich erzeuge zwei Int pointer und will sie zusammen hashen wenn beide eine gerade Adresse haben (siehe inthash).
Allerdings ist die Ausgabe immer "no matching" auch wenn die beiden Adressen gerade waren.
Könnt ihr euch das erklären?Viele Grüße,
Jean
-
Hi,
hab das Problem gefunden:
man muss noch eine equality selbst definieren, ansonsten vergleicht er standard-
mäßig die adressen.struct inteq { bool operator () (const T& a, const T& b) const { return *a == *b; } }; typedef unordered_multimap<T, int, inthash, inteq> mm;Jean