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++ 主题名称到字符串向量的映射的主要内容,如果未能解决你的问题,请参考以下文章

如果字符串向量包含 char 'p',我如何检查 c++

如何在 C++ 中的字符串向量中找到重复的单词?

C++ map<string, vector<pair<string, string> > > :将映射添加到空向量?

C++ 轴对齐矩形操作向量和字符串

如何在 C++ 中打印对象向量?

在 cython 的循环中创建 c++ 映射