使用文本文件中的值实现AVL树

时间:2015-11-29 20:10:37

标签: c++ avl-tree

我试图通过使用文本文件中的键/值对来实现AVL树。例如,(0003,09390,Vegas)将是一个这样的键值对,其中0003是键,而09390,Vegas是值。我很困惑如何提取每个单独的项目。我希望0003,09390和Vegas作为结构中的每个单独变量存储。

2 个答案:

答案 0 :(得分:0)

我建议使用结构来保存值:

struct Values
{
  std::string value; // such as 09390
  std::string city;  // such as "Vegas"
};

接下来,重载提取运算符:

struct Values
{
  std::string value; // such as 09390
  std::string city;  // such as "Vegas"
  friend std::istream& operator>>(std::istream& inp, Values& v);
};

std::istream& operator>>(std::istream& inp, Values& v)
{
  inp >> v.value;
  // insert code to skip over delimiter.
  inp >> v.city;
  return inp;
}

您的输入循环可能如下所示:

std::string key;
std::string delimiter;
Values v;
AVL tree;
//...
while (input_file >> key >> delimiter >> v)
{
  tree[key] = v;
}

注意:上述输入表达式仅在值空格或制表符分隔时才有效。

有关从文件读取的更多信息,请搜索StackOverflow:

  • " c ++读取文件结构"
  • " c ++读取文件csv"

答案 1 :(得分:0)

最简单的方法可能是将ignore()std::getline()结合使用:

std::string key, code, city;
if (in.ignore(std::numeric_limits<std::streamsize>::max(), '(')
    && std::getline(in, key, ',')
    && std::getline(in, code, ',')
    && std::getline(in, city, ')')) {
    // ...
}