ist std::set eine schlechte Wahl?



  • Wutz schrieb:

    kurze_frage schrieb:

    anscheinend ist das set beim einfügen immer sehr viel schneller,

    Quatsch.
    Wie meistens bei Performanzbetrachtungen gilt: "kommt drauf an";
    Anfänger sollten sind von Vermutungen und Verallgemeinerungen fernhalten (nicht nur bei solchen Performanzbetrachtungen).
    - ein vector fügt neue Elemente immer unbedingt hinzu (es laufen praktisch nur Speicher(Schreib)-Operationen ab)
    - ein set fügt neue Elemente immer bedingt hinzu (vor dem (evtl.) Hinzufügen laufen Prüfoperationen ab (lesend));
    ein set ist nur dann "schneller" als ein vector, wenn das Prüfen häufig false liefert und somit das Hinzufügen ggü. vector "eingespart" werden kann;
    ein set ist beim Einfügen somit also theoretisch langsamer als vector, keinesfalls aber "immer sehr viel schneller"

    kurze_frage schrieb:

    muss direkt probieren wie es ist wenn man sortiert einfügt, anstatt einfügen und am Schluss sortieren.

    Löse dich mal von der ganzen Sortieren-Manie.
    Wenn dein Anwendungsfall letztendlich nur darin besteht, das Vorhandensein eines Elements in einer (bereitstehenden) Liste festzustellen, brauchst du überhaupt nicht sortieren. Und dafür ist set ideal und unordered_set auch theoretisch ideal.
    Je größer die Liste, desto besser ist unordered_set ggü. set ggü. vector:

    http://ideone.com/2L6TAB

    set nutzt intern Sortierung zur Unique-fizierung der Elemente, unordered_set Hashes.

    👍

    nur als ich von use case sprach wurde mir nahe gelegt Politiker zu werden. 😉



  • Weil du es etwas eigen formuliert hast.
    Klang so nach "wenn mir das Ergebnis nicht passt, dann re-definiere ich die Frage einfach so lange bis es passt".



  • Politiker haben keine Ahnung von der Praxis, sie beziehen ihr "Wissen" aus Hörensagen.
    Ein Stück weit kommst du dem nahe, wenn du aus deiner Beobachtung weniger Einzelfälle allgemeine Schlussfolgerungen ziehst (und damit dann womöglich noch hausieren gehst, und wiederum anderen Leuten etwas "erklären" willst).


Anmelden zum Antworten