请帮助我,过去两三个小时我一直试图这样做,一切都没有运气。我有许多字符串以格式
格式输入input.txtstring1 string2
string3 string4
etc.
我想放入一个最初为空的std :: set。我想对字符串进行编号并将它们放入集合中以跟踪重复项,因此我不再对它们进行编号。我正在尝试初始化std::set<std::string> inGraph
但无法使其正常工作。我试图初始化std::set<std::string> inGraph(0, tot_lines);
,其中0到tot_lines是我希望从输入中得到的总字符串数的范围。我尝试使用像std::set<std::string> inGraph(tot_lines, "");
那样空的搅拌来初始化所有这些并且失败了。这就是我现在所拥有的:
struct StringInt {
std::string name; // associate name and number for each input string
int number;
};
int main(int argc, char* argv[]) {
int tot_lines = 100;
int icv1, icv2;
std::string vert1, vert2;
std::set<std::string> inGraph(); // this is the set I want to initialize
std::set<std::string>::iterator sit;
std::vector<StringInt> stringInts(tot_lines*2);
StringInt* si;
std::ifstream myfile2 ("input.txt");
if (myfile2.is_open()) {
while(myfile2 >> vert1 >> vert2) {
// read in input, put it in vars below
myfile2 >> vert1 >> vert2;
if (inGraph.find(vert1) != inGraph.end()) {
icv1 = i++;
si->name = vert1;
si->number = icv1;
inGraph.insert(vert1);
stringInts.push_back(*si);
}
else {
icv1 = si->number;
}
if (inGraph.find(vert2) != inGraph.end()) {
icv2 = i++;
si->name = vert1;
si->number = icv2;
inGraph.insert(vert2);
stringInts.push_back(*si);
}
else {
icv2 = si->number;
}
}
我得到的错误是:left of '.find' must have class/struct/union
您能否帮我弄清楚如何初始化std::set<std::string> inGraph
以便我可以对字符串进行编号?
答案 0 :(得分:2)
错误消息是因为您是Most Vexing Parse的受害者。
std::set<std::string> inGraph();
这是一个函数声明,其返回类型为std::set<std::string>
。只需删除()
之后的inGraph
即可使其成为对象声明。