动态更新向量并使其持久化

时间:2013-08-30 04:29:58

标签: c++ vector

我正在阅读用户的内容,并在矢量数组中获取每个单词的出现值。

每次程序运行向量都会从用户获取新内容以进行处理。在下面的示例中,我已经静态地使用了字符串。

我想要

  1. 添加到vector中的单词集是持久的。我的意思是在第二次迭代时用户输入新内容;具有它的计数值的新单词应该与先前的向量值合并。每次它都会继续增长。显然,向量的范围是主要功能,因此每次程序运行时都会刷新。有人可以建议我的想法,以便我可以动态地在向量中添加内容并使其持久化吗?

  2. 上一个矢量内容的单词“mobile”,计数值为5.而用户内容也有“移动”,计数为3.然后,最终的矢量应该包含“移动”字样,数字为8.

  3. 是否有按字母顺序对矢量内容进行排序的c ++类或方法?

  4. 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;
    }
    

1 个答案:

答案 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"];