Daten wo speichern?
-
Hallo,
ich habe so ungefähr 10-15tausend Wörter, die ich gerne so speichern möchte, dass ich schnell auf sie zugreifen kann. Genau genommen möchte ich dann einzelne Wörter mit denen aus meiner Liste (nach einer vollen Übereinstimmung) vergleichen.
Bisher dachte ich an folgende Möglichkeiten:
1. Jedesmal in meine offene Textdatei reinschauen und so per fstream jedes Wort vergleichen (..nur die erste Idee)
2. Am Anfang des Programms alle Wörter in einen std::vectorstd::string speichern und diese Liste dann abklappern beim vergeleichenHabt ihr eine bessere Möglichkeit oder könnte ich es so machen?
-
Vielleicht eine Datenbank?
-
Hallo
Jedes mal die Datei öffnen und darin rumspringen ist Mist. Lad dir das Zeug mit ifstream's oder mit string streams und such dann im String. Nen String zu durchsuchen sollte shcneller gehen, als jedesmal die Datei zu öffnen.
way
-
@_matze: hm.. ich denke, eine Datenbank wäre für mein Vorhaben zu viel des Guten.
@way: Naja, ich würde die Datei nur einmal öffnen und schließen - halt am Anfang und am Ende des Programms. Das war aber eh nur eine erste Idee.
Wäre es denn schneller, einen String anstelle eines Vectors zu durchsuchen? Oder macht das bei der Menge an Wörtern keinen Unterschied?
-
Warum nicht einen vector-string

std::vectorstd::string vStr;Mit nem Iterator rutschte dann schnell dadurch und suchst deine Stellen.
-
way schrieb:
Warum nicht einen vector-string

std::vectorstd::string vStr;Ok, ich seh schon, ich bin auf dem richtigen Weg

iop schrieb:
...alle Wörter in einen std::vectorstd::string speichern und diese Liste dann abklappern...
Danke!
-
way schrieb:
Warum nicht einen vector-string

std::vectorstd::string vStr;Mit nem Iterator rutschte dann schnell dadurch und suchst deine Stellen.
Ja, vor allem das "schnell" ist hier das Problem.
Wenn es um Vergleiche geht, wäre ein assoziativer Container besser geeignet. Zum Beispiel
std::set(logarithmische Komplexität) oder sogar der Hash-Containerstd::unordered_set(fast konstante Komplexität). Kommt halt genau drauf an, welche Operationen wie oft benötigt werden.Aber zumindest ist ein assoziativer Container massiv schneller als ein sequenzieller, bei dem jedes Mal durchiteriert werden muss (lineare Komplexität).