Gibt es eine Möglichkeit zum begrenzen der Größe einer STL-Map?

Ich umsetzen will, eine Art lookup-Tabelle in C++, der als ein cache. Es soll zu emulieren, ein Stück hardware, die ich bin, zu simulieren.

Die Tasten sind nicht ganzzahlig, so ich raten bin, ein hash ist in Ordnung. Ich habe nicht die Absicht, zu erfinden das Rad, so dass ich verwenden möchten std::map für diese (auch wenn Vorschläge für alternativen sind willkommen).

Die Frage ist, gibt es eine Möglichkeit zur Begrenzung der Größe der hash zu emulieren, die Tatsache, dass meine hardware ist von endlicher Größe? Ich würde erwarten, dass der hash ist einfügen - Methode eine Fehlermeldung zurück oder werfen eine Ausnahme, wenn das limit erreicht ist.

Wenn es keine solche Möglichkeit, ich werde einfach überprüfen Sie Ihre Größe bevor Sie versuchen, Sie zu legen, aber das scheint wie eine unelegant Weg, es zu tun.

  • Was Sie tun können, ist zu werfen bad_alloc, und das kann getan werden, durch die Umsetzung Ihrer eigenen allocator. Hier ist alles, was Sie brauchen: stackoverflow.com/questions/1591591/...
  • Eine Karte ist ein Baum, nicht eine hash-Tabelle Struktur. Es wird für lookups, aber die Suche in O(log N) (im Vergleich zu O(1) für eine optimale hash -)
  • Eine Karte umgesetzt werden können, doch der Autor wählte, so lange, wie die Umsetzung erfüllt die STL Komplexität Anforderungen für den Typ. Es ist am besten, nicht vorstellen, eine gegebene STL-Typ implementiert, die in einer bestimmten Art und Weise - die Komplexität der Anforderungen sind für alle garantiert.
  • Ich weiß, dass der standard verlangt nicht eine konkrete Datenstruktur, sondern die Anforderungen in der Zeit die Komplexität in der Bemerkung halten: lookup-Operationen in einer map sind O(log N) im standard. Es ist auch eine Tatsache, dass alle vorhandenen STL-Implementierungen verwenden Sie Bäume, die intern für Karten (also auch wenn aus theoretischer Sicht die Implikation map => Baum nicht halten, aus einer pragmatischen Sicht ist es nicht). Ein Teil der Grund ist, dass es schwer ist zu kommen mit eine andere Datenstruktur, die alle Anforderungen in allen Operationen, die der standard macht halten.
  • Der Namensraum "std" nicht "stl", so habe ich Sie bearbeitet die Frage, zu sagen: "std::map" anstelle von "stl::map".
  • Eine hash-Tabelle erfordert, die Tasten sind hashable; Bäume benötigen, die Schlüssel sind bestellt. Der C++ - standard erfordert, dass std::map Tasten sind sortierbar, aber nicht verlangen, Sie hashable. Auch, itertion über eine std::map hat, Durchlaufen Sie alle Schlüssel in diesem genauen Reihenfolge Sortieren. Daher können wir sicher sagen, dass der standard nicht zulässt, dass std::map eine hashtable.

Schreibe einen Kommentar