我有一个分配,我应该做一个函数,该函数接受单个字符串文件名输入,并返回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;
}
答案 0 :(得分:1)
您可以通过两种方式做到这一点:
要么直接返回undeordered_map
(什么都不会阻止您返回它,但是您不能像返回int
一样返回它)
或者您将预先存在的一个传递给函数
这些都是微小的变化。
选项一,直接将其返回:
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
}
count_words()
首先被定义为返回int
?如果给出了,也许您应该质疑您的方法。如果由您选择,在这种情况下为什么要退回地图?这些问题不在此处回答,它们是供您考虑所有这些问题的(如果有任何帮助,也许可以在本问答之外进行讨论)。