Fragen zu den Sets



  • Hallo!

    Mir sind da noch einige Dinge unklar:

    1.) Der unterschied zwischen Map und Set ist, dass bei Sets keine doppelten Werte erlaubt sind. Richtig?

    1.1) Ist das der einzige unterschied?

    2.) Treemaps/sets sind immer sortiert, hashmaps/sets/tables nicht. Richtig?

    3.) Ich hab gelesen in collections bzw. sets muss die positionnicht unbedingt erhalten bleiben, wenn man das will nimmt man eine list/vector. Aber wie ist das mit maps?

    4.) Der Stack taucht in der Vererbungshierarchie gar nicht auf und ist etwas vollkommen selbstständiges. Richtig?

    Danke 🙂



  • ach ja, was ist ein PreSet?!?



  • Bei std::set / std::map wird automatisch sortiert.
    Das sind sogegnannte assoziative Container, da sie einen Key mit einem Value verknüpfen. Auf den Value greift man unter angabe des Keys zu. Und das std::set ist ein spezial Fall der std::map, bei welchem Key und Value dasselbe sind.

    Bei beiden sind nur eindeutige Keys möglich.

    Um Key's mehrfach zu vergeben sind std::multimap / std::multiset.

    Für genauere Informationen empfehle ich die Dokumentation der entsprechenden Klassen zu lesen:
    http://www.cppreference.com/

    BTW: Bei den STL Container gibts kein Vererbungshirarchie.

    Ich hoffe dies beantwortet einige deiner Fragen.
    Grüsse Simon



  • Relativ, meine fragen sind nicht C++ spezifisch sondern allgemein gestellt.

    Das die std::map dann durch eine Treemap repräsentiert wird, also eine Sortierung anhand der Schlüssel erfolgt und die Implementierung ein Baum ist, geht ja schon einen Schritt tiefer.

    Ich brauch da mehr allgemeine Aussagen darüber, ob meine gesammelten Informationen stimmen.



    1. Nein, das wäre der Unterschied zwischen Set und MultiSet (bzw. zwischen Map und MultiMap)

    2. Das sind Fragen des inneren Aufbaus - Container auf Binärbaum-Basis sind sortiert (linker Nachfolger kleiner, rechter Nachfolger größer als (Teil)Wurzel), Container auf Hash-Basis sind unsortiert (aus dem Schlüssel wird ein Index in einem Array berechnet).
      (wobei - die Anordnung im Hash-Set kann man auch als sortiert bezeichnen, nur mit etwas anderem Sortierkriterium :))

    3. Bei Set/Map wird die Position durch das Vergleichskriterium (bzw. die Hash-Funktion) bestimmt, bei Liste/Vektor/... durch die Reihenfolge der Einfügevorgänge.

    4. Stack ist (zumindest in C++) kein eigenständiger Container, sondern ein Container-Adapter (mit etwas eingeschränkter Funktionalität gegenüber den Containerklassen).
      (was du mit Vererbungshierarchie meinst, mußt du genauer erklären)


Anmelden zum Antworten