Intelligenere Lösung gesucht
-
Hallo,
ich habe zwei klassen die auf unterschiedliche ids zurückgreifen
die ich nicht verändern kann aber nutzen muss.Im moment transformiere ich sie so:
... else if (pid == ID_SHOW_INT) return setup::id_int; else if (pid == ID_SHOW_PAN) return setup::id_pan; else if (pid == ID_SHOW_PTG) return setup::id_ptg; ... // in die andere richtung else if (pid == setup::id_int) return ID_SHOW_INT; else if (pid == setup::id_pan) return ID_SHOW_PAN; else if (pid == setup::id_ptg) return ID_SHOW_PTG;Gibt es dafür eine intelligentere Lösung?
-
LUT? Switch-case?
-
switch
bzw. eben eine multimap bzw 2 maps.
aber nein, ich würde dafür ein simples switch nehmen (spart gegenüber dem if viel Schreibarbeit)
-
Je nach Umfang würde ich eine eigene Klasse bauen:
#include <map> class IDConverter { std::map<int,int> PID2Setup; std::map<int,int> Setup2PID; public: void insert( int PID, int Setup ) { PID2Setup[PID] = Setup; Setup2PIDSetup] = PID; } int PID( int Setup ) const { // ggf. Vorhandensein prüfen return Setup2PID[Setup]; } int Setup( int PID ) const { // ggf. Vorhandensein prüfen return PID2Setup[PID]; } }Möglicherweise bietet boost::multimap da eine bessere Lösung, die habe ich allerdings noch nicht eingesetzt und kann daher wenig dazu sagen.
-
Kleiner Flüchtigkeitsfehler: operator[] funzt auf const maps nicht.
-
krümelkacker schrieb:
Kleiner Flüchtigkeitsfehler: operator[] funzt auf const maps nicht.
Jau, das ist wohl so. Iteratoren und find() waren mir für die drei Zeilen zuviel Schreibarbeit

-
at() sollte es tun
-
transorm_ schrieb:
... else if (pid == ID_SHOW_INT) return setup::id_int; else if (pid == ID_SHOW_PAN) return setup::id_pan; else if (pid == ID_SHOW_PTG) return setup::id_ptg;Gibt es dafür eine intelligentere Lösung?
Stehen diese ID's für Werte ab 0 aufwärts? Dann löst ein gewöhnliches C-Array
das Problem effizienter als Switch oder Map.hth
-
constX schrieb:
transorm_ schrieb:
... else if (pid == ID_SHOW_INT) return setup::id_int; else if (pid == ID_SHOW_PAN) return setup::id_pan; else if (pid == ID_SHOW_PTG) return setup::id_ptg;Gibt es dafür eine intelligentere Lösung?
Stehen diese ID's für Werte ab 0 aufwärts? Dann löst ein gewöhnliches C-Array
das Problem effizienter als Switch oder Map.hth
Danke erst einmal an alle Ideen.
Die ids beginnen nicht mit Null haben keine Reihenfolge.
Sind gewöhnliche unsigned int Werte
-
Mr X schrieb:
at() sollte es tun
Auch wenn der Thread jetzt schon zwei Tage alt ist, aber std::map hat kein at().