【问题标题】:c++ mapping of topic name to vector of stringsc++ 主题名称到字符串向量的映射
【发布时间】: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 分钟做什么很重要。你的想法,你可能会问什么问题,等等。
  • 那你会怎么看我问这个问题?也许花时间在代码块中输入代码?这是一个在线问题,而不是当面提问。

标签: c++ string dictionary vector


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多