So I was given this question and 20 minute to solve
这是功能主体的开始
typedef map<string, vector<string>> TopicMap;
typedef map<string, int> TopicCount;
vector<string> split (const string& line, char delim =' ')
{
vector<string> strs;
size_t pos = line.find(delim);
size_t initialPos = 0;
while (pos != string::npos)
{
strs.push_back(line.substr(initialPos, pos-initialPos));
initialPos = pos+1;
pos = line.find(delim, initialPos);
}
strs.push_back(line.substr(initialPos, pos - initialPos));
return strs;
}
TopicCount countTopicOccurences (const TopicMap& topicMap, const vector<string>& reviews)
{
//TODO complete me
for (string reviewword:reviews) {
}
}
基本上,我有输入vector作为评论列表和主题(字符串)到构成主题(向量)的关键字的映射。我必须输出主题名称映射到每个评论的次数。
我只是不知道如何在20分钟内解决此问题,因为了解此问题大约需要5分钟。给出了c ++拆分字符串功能。
我试图通过对每个评论使用for_each循环,然后对单个主题使用for_each循环for_each循环来解决这个问题。因此,如果一个主题映射到一个评论,则该主题的映射将增加1。但是,我发现很难写下可行的代码。
任何帮助将不胜感激。
答案 0 :(得分:0)
第一件事是使用提供的功能将评论分为单词。然后,您需要在主题图中搜索这些单词。
一个非常原始的答案只是一次又一次地迭代主题图。它没有经过优化,但是绝对可以在20分钟内完成:
{
"id": 1,
"subdocuments": [
{
"id": "A",
"name": 1
},
{
"id": "B",
"name": 2
},
{
"id": "C",
"name": 3
}
]
}
当然,提供的数据集没有给出预期的答案。但这与该计数功能无关,但与提供的错误的split()函数有关,该函数仅使用一个定界符。因此,标点符号的处理就像是单词的字母一样,导致某些匹配的单词无法识别。我让您练习这种改进以及优化。