map mit struct und variant



  • Moin zusammen!

    Folgenden Code habe ich:

    
    #include <variant>
    #include <string>
    #include <map>
    #include <iostream>
    
    struct sbasic{
    	unsigned short int length; // laenge
    	unsigned short int width; // breite
    	unsigned short int height; // hoehe
    	unsigned short int type; // art 
    	unsigned long long int x; // Position
    	unsigned long long int y; // Position
    	unsigned long long int z; // Position
    };
    
    //zuladung
    struct spayload{
    	unsigned short int type; // art 
    };
    
    //zuladung menge
    struct spayloadamount{
    	unsigned short int type[64]; // art
    	unsigned short int amount[64]; // menge an zuladung
    };
    
    int main(int argc, char *argv[]) {
    
    	std::map<sbasic, std::variant<spayload,spayloadamount>> mm;
    
    	mm.insert ( std::pair<unsigned short int,unsigned short int,unsigned short int,unsigned short int,unsigned long long int,unsigned long long int,unsigned long long int>(100,100,100,100,100,100,100) )
    
    	return 0;
    
    }
    
    

    Mein Ziel ist es, eine map zu erstellen mit variablen Inhalt.
    Soll heißen, je nachdem welchen Wert die Variable "type" in "sbasic" hat, möchte ich die beiden anderen struct Strukturen mit einbeziehen.

    Leider bekomme ich jetzt schon folgende Fehlermeldung:

    [Error] wrong number of template arguments (7, should be 2)

    Auch wenn ich nur 2 Argumente habe, wird das Kompilieren mit Fehlern abgebrochen.

    Könnt ihr mir bitte weiter helfen?

    Vielen Dank im Voraus.



  • @no_name1991 Nur kurz vom Handy:
    So funktioniert das mit Maps und Pairs nicht.
    Ein pair ist ein Tuple aus genau zwei Typen.
    Eine Map ist ein Container von einem Pair Typen. Die Doku redet dabei von "key value Pairs". Dabei ist wichtig, dass der Key Teil Vergleichbar ist. Wenn der Typ nicht einfach vergleichbar ist, musst du das selbst definieren und implementieren.



  • @Schlangenmensch sagte in map mit struct und variant:

    Vergleichbar

    Genauer gesagt, sollte es einen Comperator und Hasher geben, je nachdem, welche Map Implementierung man wählt (unordered_map ist die schnellste)...

    (Auch ich schreibe gerade vom Handy, man möge daher Rechtschreibfehler bitte billigen...)