从一个流里接收不断数据,数据项有很多,我只其中两项,我假设其中一个是类型Type,一个是数据值Value,一个类型下面有很多值,而类型只有几个。因为我不知道有多少数据和类型,我原先设计是用两个向量vector分别接收Type和Value。
但我要全部的数据接收完成之后再将其转为CTreeCtrl,将Type做成根结点,Value做成其下的子结点。
后来我又想用一个数据结构和一个向量表示,如下:
struct{Type,Value},vector<struct>
但好像转为CTreeCtrl时要比较值,也麻烦,有没有更好的实现方式?征集一下大家的意见,请不吝指教!

解决方案 »

  1.   

    再描述一下,上面描述还有一点问题,其实有三个字段。
    从一个函数里接收一个结构体数据,我从结构体里面需要三项数据,我这里假设这三项为Type,SubType,Value.
    这个函数是网络应答的函数,所以每次发一个结构体来,我就取上面三项的数据。可能有几个Type,而一个Type下面可能对应几个SubType,一个SubType下面对应几个Value。
    现在的问题是,我要用一个数据结构来存储我所说的三项数据,当我全部接收完成之后,我把这数据组织成树结构形式,如下:
    Type
        SubType
            Value
            Value
        SubType
            Value
            Value
        ...
    Type2
        SubType2
            Value2
        ....
    应该怎样设计?
      

  2.   

    struct SubTypeValue
    {
        int subType;
        std::vector<int> valueArray;
    };struct TypeValue
    {
        int type;
        std::vector<SubTypeValue> valueArray;
    };接收到的是TypeValue结构
    里面包含一个类型type和一组SubTypeValue,
    每个SubTypeValue中则包括了子类型及其任意多个数据。
      

  3.   

    一般树形结构的数据用三列来实现
    列1       下级          级别         
    Type     SubType      1级  
    ...     ...       ..
    SubType  Value       2级
    .....    ....    ...
    Value     无           3级 //把Value 看作  SubType  的子
    实现 
      struct{列1,列2,列3},vector<struct> s建立树时 先找出级别1级别然后2级,然后3级的...
    为减少比较次数,可以
    分成3个vectorvector1  存储  Type 
    vector2 存储   Type 和  SubType  
    vector2 存储  SubType 和  Value     
    构造树时
    1级取vector1 构造2级时查找 vecot2
    三级查找 vector3等
      

  4.   

    struct SubTypeValue
    {
        int type;
        int value;
    };struct TypeValue
    {
        int type;
        std::vector<SubTypeValue> array;
    };
    这个不知如何?
    我编程有时不大计较时间。对小数据量,以简便为主。
      

  5.   

    实际作业时,可以考虑指针数组:
    struct TypeValue
    {
      int type;
      std::vector<SubTypeValue*> valueArray;
    };
    对于体积较大的类或结构,使用指针数组较好。题外话:
    为了安全,建议做一个指针数组派生类:
    class SubTypeValyeArray : public std::vector<SubTypeValue*>
    {
    };
    struct TypeValue
    {
      int type;
      SubTypeValyeArray valueArray;
    };
    将new、delete等操作封装在这个派生类中,当SubTypeValyeArray析构时,delete每一元素指针。
    我是专门做了一个模板类。