有什么好的办法存储和读取树型结构的数据?

时间:2021-11-02 12:41:19
想要读出并且保存一个树型结构的数据,保存的数据可以供以后调用。 比较好的办法似乎是把数据读入一个树型控件中(CTreeCtl),但是现在不希望显示树型控件(因为只是一个类,没有界面)。而创建树型控件需要有一个父窗口的句柄,因此没有界面似乎就无法创建树型控件。很矛盾,不知道该怎么解决。

10 个解决方案

#1


mark and go home

#2


用xml

#3


打算要读的就是一个xml文件

#4


存储和提取的例子:
http://www.codeproject.com/useritems/ctreectrl_xml.asp

#5


可以这样作:
  讲各个属性保存到*.ini(或者注册表中)中,通过读取、写入section/key的方法进行操作。
  具体如下:
  【root】
     root1=   ;以结构体的形式保存到key中,结构中可以包含是否有child,节点section name等信息
     root2=    ;
     。。。
  【root1】
     root1_1=;
     root1_2=;
  【root1_1】

#6


谢谢,但大家似乎没有明白我的意思。这是个后台的程序,只是个中间过程,再去构造一个ini似乎不妥。

#7


自已写一个与之对应的"树"类

#8


偶以前曾用过递归的方式来存。以下是大概的思路:
void write(node)
{
  write('0');
  write(node.content);
  for ( i = 0; i < node.childCount; ++i ) {
    write('1');
    write(child[i]);
  }
  write('2');
}

void read(node)
{
  for ( ;; ) {  
    flag = readchar;
    switch (flag) {
      case '0':
        // the next will be content
        read(node.content);
        break;
      case '1':     
        child = node.createChild();
        read(child);
        break;
    }
    if ( flag == '2' ) break;
  }
}
使用的时候调用write(root)和read(root)即可

#9


xml

#10


superarhow(苏泊尔耗) 的程序 看不大明白, node是树控件的节点吗?

现在考虑用模版来做,
template<Class T>

如此定义map:
typedef map<string, T>  myMap;

T既可以是string,也可以是某个节点下的树。

但问题是使用模版的时候还是要给T指定一个类型,如果指定为string,那就不能得到树, 如果指定为myMap,因为其中有未指定的T,则通不过编译。    想了很多办法,但都不行,不知道这种办法到底可不可行。

#1


mark and go home

#2


用xml

#3


打算要读的就是一个xml文件

#4


存储和提取的例子:
http://www.codeproject.com/useritems/ctreectrl_xml.asp

#5


可以这样作:
  讲各个属性保存到*.ini(或者注册表中)中,通过读取、写入section/key的方法进行操作。
  具体如下:
  【root】
     root1=   ;以结构体的形式保存到key中,结构中可以包含是否有child,节点section name等信息
     root2=    ;
     。。。
  【root1】
     root1_1=;
     root1_2=;
  【root1_1】

#6


谢谢,但大家似乎没有明白我的意思。这是个后台的程序,只是个中间过程,再去构造一个ini似乎不妥。

#7


自已写一个与之对应的"树"类

#8


偶以前曾用过递归的方式来存。以下是大概的思路:
void write(node)
{
  write('0');
  write(node.content);
  for ( i = 0; i < node.childCount; ++i ) {
    write('1');
    write(child[i]);
  }
  write('2');
}

void read(node)
{
  for ( ;; ) {  
    flag = readchar;
    switch (flag) {
      case '0':
        // the next will be content
        read(node.content);
        break;
      case '1':     
        child = node.createChild();
        read(child);
        break;
    }
    if ( flag == '2' ) break;
  }
}
使用的时候调用write(root)和read(root)即可

#9


xml

#10


superarhow(苏泊尔耗) 的程序 看不大明白, node是树控件的节点吗?

现在考虑用模版来做,
template<Class T>

如此定义map:
typedef map<string, T>  myMap;

T既可以是string,也可以是某个节点下的树。

但问题是使用模版的时候还是要给T指定一个类型,如果指定为string,那就不能得到树, 如果指定为myMap,因为其中有未指定的T,则通不过编译。    想了很多办法,但都不行,不知道这种办法到底可不可行。