Sieht so aus, als ob Sie besser eine neue Karte erstellen und sie später austauschen sollten. Sie haben nur n
einfügen Operationen anstelle von n
Löschungen und n
Einfügungen.
Ja, Sie müssen den alten Eintrag entfernen und einen neuen mit dem neuen Schlüssel hinzufügen. Schlüssel sind nicht änderbar.
Wenn Sie nur ein oder wenige Elemente modifizieren, können Sie dies effizient tun, indem Sie map::insert
mit der Position des neuen Elements angeben. Da sich Ihre neuen Schlüssel sicher irgendwo hinter den alten Schlüsseln befinden, können Sie einen Hinweis auf den Iterator geben, der auf das alte Element zeigt. Allerdings müssen Sie darauf achten, die neu eingefügten Schlüssel nicht neu zu bewerten (indem Sie beispielsweise von vorne nach vorne iterieren). Wenn Sie die gesamte Karte ändern, ist es effizienter, einfach eine neue zu erstellen.
Ich denke, du musst eine neue Karte erstellen. Wenn Sie innerhalb der Schleife neue Schlüssel löschen und hinzufügen, kann dies die Integrität des Iterierens über die alten Schlüssel zerstören und die gerade eingefügten Schlüssel nicht berühren. (Es sei denn, Sie wissen, wie Ihre Schlüssel verteilt sind und legen Sie Ihre eigene Logik hinein.)
%Vor% Es gibt noch eine weitere Option. Wenn diese Operation ein wichtiges Merkmal Ihrer Sammlung ist und die Leistung wichtig ist, können Sie vermeiden, die Karte vollständig zu kopieren. Sie können eine Klasse erstellen, die operator[]
sowie andere Zugriffsmethoden und Mutatoren überlädt, und die aktuelle Verschiebung des Schlüsselwerts hinzufügen.