Sparse-array in C++

Brauche ich eine Vektor-wie container, mit ganzzahliger Indizierung, aber wo einige Indizes weggelassen. Also, was ist die gängige Methode zur Darstellung von solchen sparse-array in C++?
Ich habe eine intuition, die std::map ist hauptsächlich für solche Zwecke eingesetzt. Aber es ist Recht langsam für einen container, in dem neue Elemente sind meist nicht Hinzugefügt. Was können Sie vorschlagen?

UPD: Nicht sehr "spärlich". Vielleicht über 5%. Elemente, die meist während der Initialisierung in Schritt (und nicht sehr oft nach). Aber der Zugang ist Häufig (natürlich möchte ich nicht zu diesem Thema, wenn es nicht entscheidend war).

  • Versuchen Sie eine unsortierte anzeigen von boost und C++11.
  • Wie spärlich ist "spärlich"? Prozentsatz? Wenn die Speicherung von zusätzlichen Werten zwischen ist zu erwarten, Häufig, einige Techniken möglicherweise nicht geeignet. Sie benötigen Häufig Zugriff/iteration in der index-Reihenfolge?
  • Erklären Sie, wie es langsam ist.
  • boost-flache Karte ist, eine schnellere version der map, außer Einfügungen sind super langsam (O (n)), so dass Ihre Nutzung Muster muss füllen anzeigen verwenden Sie anzeigen, nicht: füllen Sie die Karte verwenden, hinzufügen , verwenden, hinzufügen , entfernen, verwenden Sie...
  • Das scheint eine XY-Problem. Das problem ist anscheinend performance-Anforderungen, und Sie sind angenommen, dass der Weg zur Erreichung dieser Anforderungen ist die Verwendung eines sparse-Arrays.
  • Wie viele arrays, was die (Durchschnittliche) Länge, und was ist der element-Typ? Könnte sein, dass ein reguläres array ist nicht allzu teuer, und ich würde nicht behaupten, dass eine Karte ist zu langsam ohne benchmarking typische Szenarien.
  • Ich habe Sie für lineare algebra, dann gibt es eine Reihe von C++ - Bibliotheken, Unterstützung von sparse-Vektoren und-Matrizen. Aus der Spitze von meinem Kopf, es ist Eigen und zu Steigern.uBlas.

InformationsquelleAutor Gurio | 2014-01-23
Schreibe einen Kommentar