Ich muss die folgende Datenstruktur für mein Projekt implementieren. Ich habe eine Beziehung vonC++ Bimap Left unordered_map Richtig sortierte veränderbare Multimap
const MyClass*
zu
uint64_t
Für jeden Zeiger ich mit ihm verbunden einen Zähler speichern möchten, die im Laufe der Zeit geändert werden kann (in der Tat nur erhöht). Das wäre kein Problem, ich könnte es einfach in einer std :: map speichern. Das Problem ist, dass ich schnellen Zugriff auf die Zeiger benötige, die die höchsten Werte haben.
Deshalb kam ich zu dem Schluss, einen boost :: bimap zu verwenden. Es definiert ist, folgt für mein Projekt:
typedef boost::bimaps::bimap<
boost::bimaps::unordered_set_of< const MyClass* >,
boost::bimaps::multiset_of< uint64_t, std::greater<uint64_t> >
> MyBimap;
MyBimap bimap;
Dies würde funktionieren, aber bin ich richtig, dass ich nicht die uint64_t auf Paar ändern kann, die einmal eingeführt wurden? Die Dokumentation besagt, dass multiset_of konstant ist und daher kann ich den Wert eines Paares im Bimap nicht ändern.
Was kann ich tun? Was wäre der richtige Weg, um den Wert eines Schlüssels in diesem Bimap zu ändern? Oder ist für dieses Problem eine einfachere Datenstruktur möglich?
Klingt wie eine Prioritätswarteschlange. –
Stellen Sie sich den Code vor, der zur Aufrechterhaltung der Indexintegrität erforderlich wäre, wenn der Schlüssel der rechten Seite veränderbar wäre ... –
können Sie die Prioritäten in einer Prioritätswarteschlange ändern? und ist es möglich, auf die ersten N-Werte zuzugreifen? –