主题名称到字符串向量的c ++映射

时间:2018-10-28 22:59:48

标签: c++ string dictionary vector

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。但是,我发现很难写下可行的代码。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

第一件事是使用提供的功能将评论分为单词。然后,您需要在主题图中搜索这些单词。

一个非常原始的答案只是一次又一次地迭代主题图。它没有经过优化,但是绝对可以在20分钟内完成:

{
    "id": 1,
    "subdocuments": [
        {
            "id": "A",
            "name": 1
        },
        {
            "id": "B",
            "name": 2
        },
        {
            "id": "C",
            "name": 3
        }
    ]
}

当然,提供的数据集没有给出预期的答案。但这与该计数功能无关,但与提供的错误的split()函数有关,该函数仅使用一个定界符。因此,标点符号的处理就像是单词的字母一样,导致某些匹配的单词无法识别。我让您练习这种改进以及优化。

Online demo