如何遍历c ++ map <string,vector <string >>,直到达到特定的vector <string>字符串值?

时间:2019-12-01 21:07:11

标签: c++ dictionary c++14 stdmap

如何遍历地图直到达到某个值?

我正在尝试根据map<string, vector<string>>创建一个随机句子生成器函数,该函数可以阅读整本小说(Frankenstein和Sleepy Hollow)。我们从字符串键“ ^”开始,它标记一个句子的开头,并且还包含vector<string>作为其值,其中"Start your sentence generation with the ^ key. From the associated vector, randomly pick one token word, and add it to your sentence result (separated by a space “ “). Call the C++ function rand() to get a random number. Use your token word to grab the next list of candidates and repeat until the token word you get is $"包含小说中所有在句子开头的单词。从这个向量中,我们需要随机选择一个字符串,然后该字符串成为随机生成的句子中的第一个单词,并且也成为新的关键字。这个新键具有自己的关联字符串向量(该字符串向量包含小说中紧随句子的第一个单词之后的所有单词),我们再次选择一个随机字符串。这个随机字符串成为句​​子中的第二个单词,也成为新关键字。我们一直这样做,直到我们随机选择“ $”字符串值,该值被编码为标记句子的结尾。

目前,我正在使用迭代器,但我不一定要遍历整个地图,直到找到“ $”为止。我是否只需要吸收它并使用迭代器遍历整个地图,还是有另一种方式(例如while循环)?我已经尝试了所有我能想到的一切,然后尝试了一些,而且我不知所措,因此,我们将不胜感激。

此功能的确切说明是: std::string BookBot:: generateSentence() { std::string startString = "^"; std::string sentence; std::map<std::string,std::vector<std::string>>::iterator iter2; for(iter2 = markov_chain.begin(); iter2!=markov_chain.end(); iter2++) { std::vector<std::string>tempor = markov_chain[startString]; startString = tempor[rand()%tempor.size()]; if(startString == "$") break; sentence+=startString + " "; } return sentence; }

我发誓这正是我正在做的事情,但是我的程序无法生成正确的输出。这是我目前所拥有的:

count = db.Column(JSONB)

0 个答案:

没有答案