我正在阅读用户的内容,并在矢量数组中获取每个单词的出现值。
每次程序运行向量都会从用户获取新内容以进行处理。在下面的示例中,我已经静态地使用了字符串。
我想要
添加到vector中的单词集是持久的。我的意思是在第二次迭代时用户输入新内容;具有它的计数值的新单词应该与先前的向量值合并。每次它都会继续增长。显然,向量的范围是主要功能,因此每次程序运行时都会刷新。有人可以建议我的想法,以便我可以动态地在向量中添加内容并使其持久化吗?
上一个矢量内容的单词“mobile”,计数值为5.而用户内容也有“移动”,计数为3.然后,最终的矢量应该包含“移动”字样,数字为8.
是否有按字母顺序对矢量内容进行排序的c ++类或方法?
1
int main()
{
typedef std::unordered_map < std::string, int >occurrences;
occurrences s1;
std::string s = "one two two three one one two";
std::string input = "one,two; three";
std::istringstream iss(std::move(s));
std::vector < std::string > most;
int max_count = 0;
while (iss >> s) {
int tmp = ++s1[s];
if (tmp == max_count) {
most.push_back(s);
} else if (tmp > max_count) {
max_count = tmp;
most.clear();
most.push_back(s);
}
}
//Print each word with it's occurance
//I want vector most to be declared and used in such a way that below coming value should remain persistent each time user perform action
for (occurrences::const_iterator it = s1.cbegin(); it != s1.cend(); ++it)
std::cout << it->first << " : " << it->second << std::endl;
//Print the words with max occurance
std::cout << std::endl << "Maximum Occurrences" << std::endl;
for (std::vector < std::string >::const_iterator it = most.cbegin(); it != most.cend(); ++it)
std::cout << *it << std::endl;
return 0;
}
答案 0 :(得分:1)
您的第一个问题基本上是serialization的用法。在这种情况下,最简单的选择可能是将向量中的内容保存到文件中,并在下次运行程序时重新读取该文件。
对于问题2和3,请使用std::map
而不是向量。这将使所有内容按排序顺序排列(基于排序标准,对于字符串,默认为词典编排)。它也不允许重复键。例如,以下代码基本上可以执行您想要的操作:
std::map<std::string, unsigned> words;
...
// Initialize mobile to have a count of 5
words["mobile"] = 5;
...
// Increment count when another "mobile" is seen.
++words["mobile"];