2010-04-22 7 views
6

Ich frage mich, ob jemand von Ihnen wissen, eine C++ - assoziative Map-Container-Typ, den ich mehrere Schlüssel-Lookups durchführen kann. Die Karte muss konstante Zeit-Lookups haben, aber es ist mir egal, ob sie geordnet oder ungeordnet ist. Es muss nur schnell sein.Multiple Key Map in C++

Zum Beispiel möchte ich eine Reihe von std :: vector Objekten in einer Karte mit einer Ganzzahl und einem void * als Lookup-Keys speichern. Sowohl der int als auch der void * müssen übereinstimmen, damit mein Vektor abgerufen werden kann. Gibt es so etwas schon? Oder werde ich meine eigenen rollen müssen. Wenn ja, irgendwelche Vorschläge? Ich habe versucht, eine boost :: unordered_map in einem anderen Boost :: unordered_map zu speichern, aber ich hatte noch keinen Erfolg mit dieser Methode. Vielleicht werde ich diese Methode weiterführen, wenn es keinen einfacheren Weg gibt. Vielen Dank!

Antwort

4

Konstantes Nachschlagen erfordert eine Hash-Map. Sie können eine boost::unordered_map (oder tr1) verwenden. Der Schlüssel wäre der combined hash des int und der void Zeiger.

+0

Das ist genau das, was ich gesucht habe. Vielen Dank! – Morgan

0

Sie könnten boost::multi_index verwenden.

(obwohl ich denke, was Sie eigentlich wollen, ist die Verwendung eines Typs, der sowohl die void * und die ganze Zahl als Schlüssel zu Ihrer Karte enthält, und nur die Rohdaten für beide zu vergleichen, um den Vergleichsoperator zu liefern die Karte)

2

Wenn Sie keinen Boost verwenden möchten, können Sie versuchen, . Die Lookups sind jedoch O (log (map size)).