Ist es möglich einen std::vector sortiert zu initialisieren?
-
Ich habe eine Mapping Tabelle welche zur Compilezeit festgelegt ist. Diese mappt gewisse Fehlercodes zu String-Indizes, also eindeutige Ints zu anderen Int Werten.
Bisher nutze ich folgendes:
#include <cstdint> #include <map> #include <algorithm> static const std::multimap<int, int> MapTable = { { 3, 2 }, { 5, 3 }, { 2, 1 }, { 7, 4 } }; int main() { std::for_each(MapTable.begin(), MapTable.end(), [](const std::pair<int, int>& P) { printf("(%i %i)\n", P.first, P.second); }); // const auto Element = MapTable.find(ErrorCode); return 0; }
Möchte ich einen weiteren Wert zu MapTable hinzufügen, so kann ich diesen einfach ans Ende packen und es wird sortiert in die MapTable eingefügt.
Ist dies auch mit static const std::vector möglich?
-
@Quiche-Lorraine sagte in Ist es möglich einen std::vector sortiert zu initialisieren?:
so kann ich diesen einfach ans Ende packen
Einfügen
@Quiche-Lorraine sagte in Ist es möglich einen std::vector sortiert zu initialisieren?:
const
da kann weder etwas in einen vector noch in eine map einfügen. const ist const.
@Quiche-Lorraine sagte in Ist es möglich einen std::vector sortiert zu initialisieren?:
Ist dies auch mit static
conststd::vector möglich?std::lower_bound + insert
-
@manni66
Sorry mein Fehler. Ich meinte einfügen zur Compilezeit nicht zur Laufzeit.
-
@manni66
Beispielsweise sostatic const std::multimap<int, int> MapTable = { { 3, 2 }, { 5, 3 }, { 2, 1 }, { 7, 4 }, { 1, 4711 } // neu hinzugefügtes Element };
-
Ich hätte ein sort algo für compile time implementiert.
Aber bevor ich meine Zeit dafür aufwende, hier vielleicht eine option, die dir helfen könnte:https://tristanbrindle.com/posts/a-more-useful-compile-time-quicksort
-
@Quiche-Lorraine sagte in Ist es möglich einen std::vector sortiert zu initialisieren?:
@manni66
Sorry mein Fehler. Ich meinte einfügen zur Compilezeit nicht zur Laufzeit.@Quiche-Lorraine sagte in Ist es möglich einen std::vector sortiert zu initialisieren?:
@manni66
Beispielsweise sostatic const std::multimap<int, int> MapTable = { { 3, 2 }, { 5, 3 }, { 2, 1 }, { 7, 4 }, { 1, 4711 } // neu hinzugefügtes Element };
Dein
MapTable
wird nicht zur Compilezeit initialisiert sondern bei Programmstart.
Das kannst du mit einem vector natürlich genau so machen, du brauchst dazu einfach bloss eine kleine Hilfsfunktion die den vector sortiert zurückgibt.
-
Dieser Beitrag wurde gelöscht!
-
Iiiihhh, man sieht die gelöschte extrem dämlich frage ja noch
Dann sag ich noch was anderes: mit constexpr std::vector <> könnte er es dann in die Compiletime verschieben.
-
@5cript
Danke für die Info. Das war genau das was ich gesucht hatte.Oh Mann, was man mit C++ alles machen kann. ich liebe es.
Dein MapTable wird nicht zur Compilezeit initialisiert sondern bei Programmstart.
Das hatte ich vergessen. Danke.