Dies ist vergleichbar mit einer jüngste Frage.
Ich werde eine sortierte Liste von Werten pflegen. Ich werde Elemente von beliebigem Wert in die Liste einfügen. Jedes Mal, wenn ich einen Wert einfüge, möchte ich seine Ordnungsposition in der Liste bestimmen (ist es der 1., 2., 1000.). Was ist die effizienteste Datenstruktur und der effizienteste Algorithmus, um dies zu erreichen? Offensichtlich gibt es viele Algorithmen, mit denen dies möglich ist, aber ich sehe keine Möglichkeit, dies mit einfachen STL- oder QT-Vorlagenfunktionen zu bewerkstelligen. Idealerweise würde ich gerne wissen, ob es Open-Source-C++-Bibliotheken oder Beispielcode gibt, mit denen dies möglich ist.
Ich kann mir vorstellen, wie man einen B-Baum oder einen ähnlichen Algorithmus für diesen Zweck modifizieren kann, aber es scheint, dass es einen einfacheren Weg geben sollte.
Bearbeiten3:
Mike Seymour hat ziemlich genau bestätigt, dass es, wie ich in meinem ursprünglichen Beitrag schrieb, tatsächlich keine Möglichkeit gibt, diese Aufgabe mit einer einfachen STL zu bewältigen. Ich bin also auf der Suche nach einem guten btree, balanced-tree oder einer ähnlichen Open-Source-C++-Vorlage, die ohne oder mit möglichst wenigen Änderungen auskommt - Pavel Shved hat gezeigt, dass dies möglich ist, aber ich möchte mich nicht selbst in die Implementierung eines balancierten Baums stürzen.
(die Historie sollte meine erfolglosen Bemühungen zeigen, Mathieus Code mit make_heap so zu modifizieren, dass er O(log N) ist)
Bearbeiten 4:
Ich spreche Pavel trotzdem meine Anerkennung dafür aus, dass er darauf hingewiesen hat, dass btree a Lösung zu finden, muss ich erwähnen, dass der einfachste Weg, diese Art von Funktionalität zu erreichen, ohne die Implementierung eines benutzerdefinierte btree c++ Vorlage selbst zu erstellen, ist eine In-Memory-Datenbank verwenden . Dies würde log n ergeben und ist Ziemlich einfach zu implementieren.