0

我正在编写一个 C++ 程序来检查加泰罗尼亚语中是否存在某些单词,所以我有一个带有加泰罗尼亚语词典的向量:

const vector<string> dict={"aaron","ababol","abac","abaca","abacallanada","abacallanava","abacas","abacial", ... ,"zum-zum","zur","zuric","zwitterio"};

问题是字典有 107776 个条目,所以当我尝试编译文件时:

g++ -Wall file.cc -std=c++0x -o file.exe

它在一段时间内什么都不做,然后 Windows 说它没有响应并关闭它。

我该如何编译它?有没有更好的方法来存储这种类型的数据(数组,...)?

4

4 回答 4

4

对于老式的内置数组,您可能会更幸运:

char const * const dict[] = {"aaron",...};

这将生成大量字符串文字和指向它们的指针数组,这对编译器来说不应该是太大的压力。这也不会使用不必要的内存,在运行时几乎没有工作。

或者,std::array<char const *>应该同样高效,具有更多的 C++ 外观和感觉。

您的版本还必须生成大量代码来initializer_list从它们构建一个,从每个构建一个字符串,并将每个字符串添加到向量中。它还需要两倍于每个字符串文字需要复制到运行时分配的内存中的内存,然后所有这些指针需要存储在另一个运行时分配的数组中。

缺点是每次从字典中读取时,您最终可能会构建一个临时字符串。如果这是一个问题,那么一系列std::string可能是一个合理的折衷方案。

于 2012-07-17T22:50:52.037 回答
3

将其存储在外部文件中,并按需加载。这是最好的解决方案,否则我想您应该将向量拆分为多个向量,并可能将它们放入单独的 cpp 文件中。

于 2012-07-17T22:30:24.027 回答
0

将字典存储在文本文件中,每行一个单词。然后将此代码添加到您的程序中:

{ 
  std::string inputFileName;
  std::ifstream inputFile(inputFileName);
  std::string word;
  while( std::getline(inputFile, word) )
    dict.push_back(word);
}
于 2012-07-17T22:31:28.323 回答
0

是否可以使用其他答案中的方法从文件中仅加载一组字典,即从文件中仅加载“a”字a.dic。还是您需要一次访问整个字典?

于 2012-07-17T22:44:11.573 回答