c++ 主题名称到字符串向量的映射
Posted
技术标签:
【中文标题】c++ 主题名称到字符串向量的映射【英文标题】:c++ mapping of topic name to vector of strings 【发布时间】:2018-10-28 22:59:48 【问题描述】: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)
基本上,我将输入向量作为评论列表和主题(字符串)映射到构成主题(向量)的关键词。我必须输出主题名称映射到每个评论的次数。
我只是不知道如何在 20 分钟内解决这个问题,因为理解这个问题大约需要 5 分钟。给出了c++拆分字符串函数。
我尝试通过对每个评论使用 for_each 循环来分解这个问题,然后对各个主题使用 for_each 循环 for_each 循环。因此,如果一个主题映射到单个评论,我会将该主题的映射增加 1。但我发现这很难写下可行的代码。
任何帮助将不胜感激。
【问题讨论】:
链接到这样的图像是不受欢迎的。出于好奇,这是你自己的 20 分钟,还是与面试官一起的 20 分钟?有时没有必要走到最后,但你用这 20 分钟做什么很重要。你的想法,你可能会问什么问题,等等。 那你会怎么看我问这个问题?也许花时间在代码块中输入代码?这是一个在线问题,而不是当面提问。 【参考方案1】:首先要做的是使用提供的功能将评论分成单词。然后你需要在主题图中搜索这些词。
一个非常原始的答案只是一遍又一遍地遍历主题图。它没有经过优化,但绝对可以在 20 分钟内完成:
TopicCount countTopicOccurences (const TopicMap& topicMap, const vector<string>& reviews)
TopicCount c;
for (string reviewword:reviews)
auto words=split(reviewword);
for (auto& word:words)
for (auto m:topicMap)
if (find(m.second.begin(), m.second.end(), word) != m.second.end() )
c[m.first]++;
return c;
当然,提供的数据集并没有给出预期的答案。但这与这个计数函数无关,而是与提供的错误 split() 函数有关,该函数仅使用一个分隔符。所以标点符号被当作一个单词的字母来处理,这会导致一些匹配的单词无法被识别。我让你作为练习这个改进,以及优化。
Online demo。
【讨论】:
以上是关于c++ 主题名称到字符串向量的映射的主要内容,如果未能解决你的问题,请参考以下文章