Lookup-Table ohne std::map?



  • Ich hätte gerne eine Lookup-Tabelle wo ich nicht zwangsläufig aufeinanderfolgende Werte nachschlagen möchte.

    z.B.

    int i = table[0x83];
    

    Wie kann ich solch eine Tabelle aufbauen/initialisieren? Zur besseren Vorstellung: Ich möchte ein Tabelle haben, wo die Indexwerte 1,5,7 vergeben sind und jeweils 3,7,9 zurückgeliefert wird.

    😕


  • Mod

    So ganz ohne genaueren Kontext bleibt nur die Antwort: Wie wäre es mit std::map? Oder unordered_map?



  • Dein Beispiel ist nichtssagen.

    Genau dafür wäre eigentlich die std::map da. Was meinst du denn mit "nicht aufeinanderfolgende Werte" ?

    Wenn es dir nur von 1,5,7 auf 3,7,9 geht (und die folgenden Werte) dann schreib dir ne Funktion die das macht...

    int func(int x)
    {
        return x+2;
    }
    


  • SeppJ schrieb:

    So ganz ohne genaueren Kontext bleibt nur die Antwort: Wie wäre es mit std::map? Oder unordered_map?

    Reicht mein Beispiel (letzter Satz) ggfs. damit ihr mir ein minimalbeispiel zeigen könntet? Das mit der 1,5,7 (wobei da kein Muster hintersteckt)



  • std::map<int, int> init()
    {
    	std::map<int, int> m;
    	m[1] = 3;
    	m[5] = 7;
    	m[7] = 9;
    
    	return m;
    }
    
    int main()
    {
    	auto m = init();
    
    	int i = m[1];
    
    	return 0;
    }
    


  • Sowas hier?

    int table[8]={};
    table[1] = 3;
    table[5] = 7;
    table[7] = 9;
    
    int i = table[5];
    


  • Vielleicht suchste das hier:

    #include <iostream>
    using namespace std;
    
    unsigned char f(unsigned char x){//berechnet irgendwie kompliziert
        if('a'<=x && x<='z')
            return 'a'+(x-'a'+13)%26;
        if('A'<=x && x<='Z')
            return 'A'+(x-'A'+13)%26;
        return x;
    }
    
    unsigned char* initTable(){//Tabelle erstellen als Array, nicht std::map
        static unsigned char table[256];
        for(int i=0;i<256;++i)
            table[i]=f(i);
        return table;
    };
    
    unsigned char* table=initTable();//Trick 17
    
    int main()
    {
        unsigned char ch;
        while(cin>>ch)
            cout<<table[ch];
    }
    

Anmelden zum Antworten