Welcher Container von C++?

Astimon

PC-Selbstbauer(in)
Hallo,

ich will mir ein Programm schreiben, womit ich meine Passwörter(hinweise) speichern kann.

Dazu werden z.B. Adresse der Internetseite, Beschreibung selbiger, Benutzername, Passwort, eMail, und noch einige andere Daten gespeichert.

Um mit dem Daten etwas zu machen will ich einen Container verwenden.


Wenn ich mein c++ Tutorialbuch richtig verstanden habe, gibt es verschiedene Container in der Standardbibliothek, die verschiedene Vor- und Nachteile haben.

Ich will mit dem Container dann (nach Häufigkeit sortiert):

Suchen, Einfügen, Sortieren, Bearbeiten, Löschen.


Zu welcher Containerart würdet ihr mir für mein Vorhaben raten?

Oder habe ich hier etwas völlig verkehrt verstanden?



Ich danke schoneinmal für eure Antworten!

Gruß, Astimon
 
Der Unterschied der verschiedenen Container liegt in der Effizenz von Operationen (Einfügen, Suchen, Löschen, ...) von Elementen auf diesen Container. Beispielsweise müssen beim Einfügen eines Elements in einem std::vector alle Elemente hinter dem Eingefügten verschoben werden (O(n)). In einer std::map (Tree) (O(ln(n)). In einer std::list ist diese Operation konstant (O(1)).
Das wird (hoffentlich) in deinem Tutorial erklärt.

O.k. wenn du noch nicht groß mit den C++ Standard-Containern und deren Verwendung (Iteratoren, Funktoren, ...) vertraut bist, dann nimm dir erstmal std::vector vor und arbeite dich damit ein. Bei der Anzahl von Einträgen, die in deinem Anwendungsbeispiel vorkommen werden, werden die ineffektiven Operationen nicht ins Gewicht fallen.
Eine std::map wäre danach eine Überlegung wert, wenn der Name der Internetadresse das ist, was hauptsächlich gesucht werden soll. Aber ohne dich in Funktoren und Iteratoren einzulesen, kommst du da nicht weit.

In erster Linie kommt es gar nicht darauf an, welchen drunterliegenden Container du verwendest. Der sollte bei guter Implementierung austauschbar sein.
 
Hi,

also, generell bräuchtest du für deinen case theoretisch geschachtelte container, damit du zum einen deine daten zusammenfassen kannst (also ein eintrag der name, beschriebung etc. enthält) und diese dann in einem anderen container schachtelst..

Ich würde dir aber empfehlen, die inhalte in ein objekt zu packen und dann die objekte in einen container zu packen.. hätte den vorteil das du in dein objekt auch ein paar zusätzliche funktionen packen kannst wenn du das ganze erweitern willst..

als container würde ich dir wahrscheinlich std::list empfehlen.. das hat schon ne rudimentäre sort funktion der du dann ne objekt-spezifische vergleichsfunktion übergeben kannst.. die performance-vorteile der einzelnen container können dir eigentlich ziemlich egal sein..

alternativ kannst du auch n vector nehmen.. hätte für dich den vorteil das du die zugriffe ohne iterator machen kannst, allerdings gibts hier keine sort funktion, also musst du was komplett eigenes mit temporärem container basteln..

weiß nicht genau wie tief du in c++ drinsteckst, aber ich hoffe, du steigst durch meine antwort durch (is schon spät ;) )
 
Vielen Dank erstmal für eure Antworten!

std::vector [...] (O(n)). In einer std::map (Tree) (O(ln(n)). In einer std::list ist diese Operation konstant (O(1)).
Das wird (hoffentlich) in deinem Tutorial erklärt.
Genau das wird leider in meinem Tutorial nicht so genau geschrieben, wie ich es mir wünsche.
Deswegen hab ich mich erstmal hier erkundigt, welchen Containertyp ich mir genauer anschauen sollte.

Rein theoretisch habe ich sämtliche Themen in dem Tutorial verstanden und kann sie so weit nachvollziehen. Jetzt gehts halt um die praktisch syntaktische Umsetzung.

Das mit den Objekten für die einzelnen Datentypen hatte ich sowieso vor, und auch mit Iteratoren kann ich schon was anfangen. ;)

Naja, wenn das performancemäßig bei den heutigen Rechnern und meinem Miniprogramm eigentlich egal ist, werd ich wohl list nehmen.


Dann schau ich einfach mal wie das mit dem Programm so wird. Ich hab recht wenig Lust mich erst langsam einzuarbeiten, also werd ich das Programm gleich richtig umsetzen. Mit Zeigern und Objekten, ich hab sogar schon eine Idee wie ich die Vererbung sinnvoll einsetzen kann.


Danke nochmal für eure Antworten, ich wollte nur mal den Anfang nachfragen, nicht das ich das ganze Programm auf dem falschen Container aufbaue. Aber einen richtig falschen Container scheint es ja offentlichtlich nicht zu geben.

Danke! :daumen:
 
Zurück