返回unordered_map的函数

时间:2018-07-03 16:31:36

标签: c++ c++11

我有一个分配,我应该做一个函数,该函数接受单个字符串文件名输入,并返回unordered_map。我基本上知道在函数内部要做什么,但是我不知道要使我的函数使用哪种变量类型才能使我能够返回unordered_map。为了能够在我的函数中编写东西,我只是将其设置为int变量类型,但是显然我无法返回unordered_map。非常感谢您的帮助!我会附上我的代码。

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <unordered_map>

using namespace std;

int count_words(string filename);

int main() {

    count_words("trainneg.txt");

    return 0;
}

int count_words(string filename) {

    ifstream ifs(filename);

    string line;
    unordered_map<string, int> word_counter;

    while (getline(ifs, line)) {
        istringstream iss(line);
        string word;
        int count;

            while (getline(iss, word, ' ')) {
                word_counter[word] += 1;
            }

    }

    return word_counter;
    }

1 个答案:

答案 0 :(得分:1)

您可以通过两种方式做到这一点:

  • 要么直接返回undeordered_map(什么都不会阻止您返回它,但是您不能像返回int一样返回它)

    < / li>
  • 或者您将预先存在的一个传递给函数

这些都是微小的变化。

选项一,直接将其返回:

unordered_map<string, int> count_words(string filename);

[...]

unordered_map<string, int> count_words(string filename) 
{
    [...]

        // int count; You don't need it, it's unused in your code.

    [...]

    return word_counter;
}

第二种方法,您将其通过:

void count_words(string filename, unordered_map<string, int> & word_counter);

int main() {

    unordered_map<string, int> word_counter;
    count_words("trainneg.txt", word_counter);

    return 0;
}

void count_words(string filename, unordered_map<string, int> & word_counter) {
    [...]

    word_counter.clear(); // The map is preexisting. We clear it instead of creating it.

    [...]

    // no return statement in that case, that's a void
}


边注:哦,查看评论,我意识到这可能是一项家庭作业,我没有注意到。如果是这种情况,请不要仅仅按原样回答。尝试批评一下,为什么选择选项1,为什么选择选项2?例如,根据您的先进程度,@ KABoissonneault正在他的评论中打开有趣的门。另外,为什么count_words()首先被定义为返回int?如果给出了,也许您应该质疑您的方法。如果由您选择,在这种情况下为什么要退回地图?这些问题不在此处回答,它们是供您考虑所有这些问题的(如果有任何帮助,也许可以在本问答之外进行讨论)。