在向量中存储重复的字符串时节省内存?

4 c++ memory string vector

我正在使用C++,它是STL.我有一个大的(100MB +)文本文件.这个文件只有很多"单词"(由空格分隔的字符串),如:

sdfi sidf ifids sidf assd fdfd fdfd ddd ddd
Run Code Online (Sandbox Code Playgroud)

我需要将每个"单词"放在一个向量中:

vector<string> allWordsInFile;
Run Code Online (Sandbox Code Playgroud)

因此,对于我从文件中读取的每个单词,我都这样做:

allWordsInFile.push_back(word);
Run Code Online (Sandbox Code Playgroud)

该文件有很多重复的单词,我正在寻找节省内存的方法.每个单词都需要在向量中的正确位置表示.如果我可以只有一个向量之外的所有单词的列表然后只是在向量中放置一个引用,那将是很好的,但据我所知,不可能将引用放在向量中.然后我想到只存储指向单词的指针,但是每个单词的长度都很短,以至于我认为它不会产生太大的影响?(每个指针在我的系统上是4个字节,大多数字符串可能大小相同).

有人可以提出另一种方法吗?

tim*_*day 7

boost :: flyweight在这里看起来很有用.

实际上,教程示例显示boost::flyweight<std::string>用于压缩数据库中名称的重复项.