如何正确初始化标准::设置<标准::字符串>?

How to initializing std::set<std::string> correctly?

本文关键字:标准 字符串 gt 设置 何正确 初始化 lt      更新时间:2023-10-16

请帮助我,在过去的两三个小时里,我一直在尝试这样做,但没有运气。 我有许多字符串以表单输入形式出现.txt格式为

string1 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以便我可以对字符串进行编号吗?

错误消息是因为您是最烦恼解析的受害者。

std::set<std::string> inGraph();

它是一个函数声明,其返回类型为 std::set<std::string> 。只需在inGraph后删除()即可使其成为对象声明。