std::set mit compare



  • Wenn ich mir nen eigenen Datentypen definiere und diesen dann in einem std::set verwenden will. Und mir eine eigene compare methode für den Datentyp schreibe

    struct MyDatatype
    {
       std::string Name;
       int Value
    };
    
    struct NameCompare
    {
            template <typename T>
            bool operator()(T&& lhs, const MyDatatype& rhs) const { return std::forward<T>(lhs) < rhs->Name; }
            
            template <typename T>
            bool operator()(const MyDatatype& rhs, T&& y) const { return rhs->Name < std::forward<T>(y); }
            
            bool operator()(const MyDatatype& lhs, const MyDatatype& rhs) const { return lhs->Name < rhs->Name; }
    
            using is_transparent = int;
    };
    
    int main()
    {
       std::set<MyDatatype, NameCompare> myset;
      // ...
    }
    

    Ist es dann besser aufgrund der sichtbarkeit die Namecompare struktur in den scope von MyDatatype zu packen.
    Oder doch besser ausserhalb um den Datentypen so klein wie möglich zu halten?



  • Die Größe von NameCompare hat nichts mit der Größe von MyDatatype zu tun. Nebenbei, NameCompare ist 0 Bytes groß ...



  • @Swordfish sagte in std::set mit compare:

    NameCompare ist 0 Bytes groß ...

    achso stimmt. using is_transparent = int;
    ist ja kein member. habe ich übersehen.

    @Swordfish sagte in std::set mit compare:

    Die Größe von NameCompare hat nichts mit der Größe von MyDatatype zu tun.
    Ist das unabhängig davon wie groß eine Klasse/Struktur innerhalb einer anderen Struktur/Klasse ist?

    Sprich wenn NameCompare nun noch ein paar Member hätte und nicht 0 Bytes groß wäre.



  • @booster sagte in std::set mit compare:

    Sprich wenn NameCompare nun noch ein paar Member hätte und nicht 0 Bytes groß wäre.

    Dann hat NameCompare trotzdem keinen einfluss auf die Größe von MyDatatype und ein std::set<MyDatatype, NameCompare> wird `NameCompare nur dann instanziieren wenn es gebraucht wird.



  • Danke Swordfish.

    Gibt es da vieleicht eine gute Seite wo man so was (Größe einer Klasse /Struktur ) nachlesen kann.



  • Da der Standard keine Größen für Standardcontainer vorschreibt ... nein. Was hindert dich an sizeof foo;?



  • nichts hindert mich. Aber bevor ich nun überall teste hätte es ja sein können dass ich das irgendwo nachlesen kann.
    Danke.


Log in to reply