Wenn Sie nur die Wörter selbst speichern möchten, ist std :: vector eine gute Wahl, aber Sie sollten sich der Neuzuweisung bewusst sein, die stattfindet.
Wenn das Wörterbuch in der gleichen Größe bleiben soll, sollten Sie in Betracht ziehen, Speicher für den Vektor zu reservieren.
im Grunde wollen Sie so etwas wie dies zu tun:
void from_file(std::vector<std::string>& content, std::string pathAndFilename = "")
{
content.reserve(1000000) //the size your dictionary has in words
std::fstream readContent;
if (pathAndFilename.empty())
{
readContent.open("file.txt", std::ios_base::in);
}
else
{
readContent.open(pathAndFilename.c_str(), std::ios_base::in);
}
std::string currentLine;
while (std::getline(readContent, currentLine))
{
content.push_back(currentLine);
}
readContent.flush();
readContent.clear();
readContent.close();
}
Das Problem mit einem Vektor ist, ist die Suche wirklich lange dauert. Wenn Sie sicherstellen können, dass jedes Wort in Ihrer dictionary.txt eindeutig ist, ist ein Satz die richtige Vorgehensweise, da ein Satz ein Baum-Container ist und die Suche dort viel schneller ist.
Sie können die Leistung der Vektorsuche verbessern, wenn Sie den Vektor bestellen, aber Sie werden nichts in der Nähe der Karten-/Mengenleistung erreichen. Trotzdem müssen Sie das Wörterbuch für die Verwendung mit einem Set vorbereiten.
Außerdem könnte man das Wörterbuch in kleinere Untervektoren aufteilen (eins für Aa eins für Bb etc.). Dies wird Ihre Leistung noch mehr verbessern, da Sie direkt am Anfang des Worts beginnen können, das Sie korrigieren möchten.
Eine Karte ist für diesen Fall nicht geeignet, da eine Karte einen Schlüssel und einen Wert speichern soll. Der Schlüssel muss auch einzigartig sein. Ok, du könntest dein Wort als Schlüssel benutzen und nur eine int ID als Wert verwenden, aber dann kannst du auch ein Set verwenden.
Insgesamt ist ein Vektor keine schlechte Wahl und die Leistung sollte in diesem Fall gut sein (auch wenn die Karte einen besseren Job macht), aber wenn Sie die beste Leistung erzielen möchten, ist Set das, wonach Sie suchen.
Normalerweise sollte ein Vektor der Standardcontainer sein. Wenn Sie Leistungsprobleme haben, können Sie einen anderen Container verwenden.
Nein, 'vector' ist eine sehr schlechte Wahl. Sie suchen nach ['std :: map'] (http://en.cppreference.com/w/cpp/container/map). –
Ich frage mich, wie eine 'map' helfen kann! – CinCout
@CinCout mit einer 'map' wird es keine lineare Suche geben, die wahrscheinlich viel schneller ist. Bitte erklären Sie, warum eine 'Karte' nicht hilft. –