如何遍历地图直到达到某个值?
我正在尝试根据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)