単語だけを保存したい場合は、std :: vectorを選択することをお勧めしますが、発生する再配置に注意する必要があります。
辞書が同じサイズで使用される場合は、ベクトルのメモリを予約することを検討する必要があります。
基本的にはこのような何かをしたい:
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();
}
ベクトルの問題は、検索が本当に時間がかかり、です。あなたのdictionary.txt内のすべての単語がユニークであることを保証できるならば、セットがツリーコンテナであり、そこを検索する方がずっと速いので、セットは行く方法です。
ベクターを注文するとマップ検索のパフォーマンスを向上させることができますが、マップ/セットの近くでは検索できません。それにもかかわらず、セットで使用するための辞書を準備する必要があります。
さらに、小さなサブベクトル(1つはAb、Bbなど)で辞書を分割できます。これは、あなたが修正しようとしている単語の最初の文字からすぐに始めることができるので、あなたのパフォーマンスをさらに向上させます。
マップはキーと値を格納するため、マップはこのケースには適していません。鍵はユニークでなければなりません。あなたはキーとしてあなたの言葉を使用することができ、ちょうど値としてint idを使用しますが、同様にセットを使用することができます。
全体的に1つのベクトルは悪い選択ではなく、この場合はパフォーマンスが良いはずですが(マップがうまくいく場合でも)、最高のパフォーマンスを達成したい場合は、探しているものを設定します。
通常、ベクターはデフォルトのコンテナにする必要があります。パフォーマンスの問題が発生した場合は、別のコンテナを使用することを検討できます。
いいえ、「ベクトル」は非常に悪い選択です。あなたは['std :: map'](http://en.cppreference.com/w/cpp/container/map)を探しています。 –
'map'がどのように役立つのでしょうか? – CinCout
@CinCoutを 'map'で実行すると、はるかに高速になりそうな線形検索はありません。なぜマップが役に立たないのか説明してください。 –