Vector mit variabler struct



  • Moin!

    Ich habe ein folgenden Ausschnitt aus dem Code:

    struct variable{
    int id;
    //weitere Variablen
    }
    struct s{
    int x;
    int y;
    variable v;
    }
    std::vector<s> va;

    Gedacht ist es für eine 2d Map (Karte).

    Ist es möglich, in Abhängigkeit der "id", vershiedene variablen in dem struct (variable) einzufügen.

    Mir geht es darum. verschiedene bzw auch gemeinsame Eigentschaften zu sammeln und effektiv zu speichern und ab zu fragen.

    Danke



  • Entweder mittels union oder aber mit modernem C++ 17 mittels std::variant<...>.
    Statt einzelner Basisdatentypen kann man selbstverständlich auch eigene struct-Daten verwenden.

    Beachte, daß dann der Datentyp immer soviel Speicherplatz benötigt, wie der Größte der verwendeten Datentypen.

    Alternative wäre eine OOP-Struktur, so daß alle Datentypen von einer gemeinsamen Basisklasse (diese kann auch leer sein) ableiten. Dann aber muß man zwingend (smarte) Zeiger verwenden: std::vector<BaseClass *> bzw. std::vector<std::unique_ptr<BaseClass>> (oder std::vector<std::shared_ptr<BaseClass>>).



  • Die Variante mit OOP sähe dann ungefähr so aus.

    struct VariableBase {
        int id;
    };
    
    struct Variable : public VariableBase {
        // weitere Variablen
    };
    
    struct s {
        int x;
        int y;
        std::unique_ptr<VariableBase> va;
    };
    
    std::vector<s> va;
    


  • @noname11

    Ich würde dir die Variante mittels std::variant empfehlen, da du mit der Funktion std::holds_alternative in einzelnen Typen herausfinden kannst.

    Klar kann man das auch mittels OOP machen, macht aber etwas mehr Arbeit.



  • Mich wundert, dass hier niemand infrage stellt, wofür er das eigentlich braucht. Ich für meinen Teil verstehe es nämlich nicht.
    @noname11 erwähnt 2d Maps, sowie verschiedene bzw. auch gemeinsame Eigenschaften.

    Zudem fehlt doch auch eine Einordnung darüber, wie das ganze benutzt werden soll. Stehen alle Varianten von vornherein fest, oder ist es sehr wahrscheinlich, dass sich die Menge der unterstützten Typen später ändert?
    Sind also die Typen die Variation Points oder sind es die Operationen? Das verändert ganz fundamental die Empfehlung.



  • @DNKpp sagte in Vector mit variabler struct:

    Mich wundert, dass hier niemand infrage stellt, wofür er das eigentlich braucht.

    Es hängt immer davon ab, wie viel Informationen jemand bereit ist zu teilen. Und über ungelegte Eier braucht man nicht zu diskutieren.


Anmelden zum Antworten