Zuerst würde ich überprüfen, dass C++ 's multimap tatsächlich O (1) für das min Element zu entfernen gibt. Die gebräuchlichsten Strukturen für sortenreine Karten/Prioritätswarteschlangen sind Baumstrukturen, in denen abgefragt wird. Das min-Element hat O (1) -Komplexität, aber entfernt es ist O (log n).
Das heißt, glaube ich, dass eine Sprungliste (als ConcurrentSkipListMap von Java implementiert) könnte geben Sie O (1) zur Entfernung des Mindest Element, aber ich bin mir nicht ganz sicher. Eines der Probleme bei der Beurteilung der Leistung von ConcurrentSkipListMap besteht darin, dass die Traversierungsoperationen Marker "aufräumen", die von vorherigen Löschungen übrig geblieben sind. So kann die Komplexität einer Operation tatsächlich davon abhängen, was die vorherigen Operationen waren. (Auf der anderen Seite, auf einer bestimmten Ebene gilt das für so ziemlich jeden Algorithmus: ob einige Daten im CPU-Cache sind, kann davon abhängen, ob eine vorherige Operation sie dorthin gebracht hat ...)
P.S. Vergessen zu sagen: siehe ConcurrentSkipListMap.pollFirstEntry().
Können Sie bitte erklären, wie eine Warteschlange eine Multimap sein kann? Der erste hat einen Typparameter und der zweite hat zwei. –
Verwenden Void als zweiten Typparameter? –
Sie müssen einen benutzerdefinierten Operator