c++ - 如何正确初始化 std::set<std::string>?

标签 c++ file file-io set inputstream

请帮助我,过去两三个小时我一直在尝试这样做,但都没有成功。我有一些字符串以格式 input.txt 的形式出现

string1 string2
string3 string4 
etc.

我想放入一个最初为空的 std::set 中。我想在字符串进入时对其进行编号并将它们放入集合中以跟踪重复项,因此我不再对它们进行编号。我正在尝试初始化 std::set<std::string> inGraph但不能让它发挥作用。我试图初始化 std::set<std::string> inGraph(0, tot_lines);其中 0 到 tot_lines 是我希望从输入中获得的字符串总数的范围。我试着用空的 stirng 初始化所有的东西,比如: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吗?所以我可以给琴弦编号?

最佳答案

错误信息是因为你是Most Vexing Parse的受害者.

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

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

关于c++ - 如何正确初始化 std::set<std::string>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18690409/

相关文章:

c++ - 派生类中虚拟方法的默认实现

C++ - 使用局部变量和全局变量时的不同并发行为

c++ - 拖放文本 - 我错过了什么?

java - 在 Android 中使用外部类从文件中写入/读取?

java - 外部文件未找到文件异常

javascript - 从 JavaScript 获取文件

c++ - 从 std::fstream 获取 FILE*

c++ - 使用递归与迭代在链表末尾插入

python - 二进制模式下 io.FileIO 和 open() 的区别

java - CSV 文件,二进制格式更快?最快的搜索?