我有一个文件,里面有多种不同的记录,但是每种记录都有唯一的ID号,(如 10张山  11小李 10张山 11小李)
我想一次性读取出来,然后为每种记录做一个索引,访问的时候不再重新读取文件,直接访问内存就行了,
请高手指点一下怎么做哦~

解决方案 »

  1.   

    可以用链表试试看呗,
    将记录按照ID挂在链表上,使用的时候从第一个开始的查询。如果记录非常多,链表的查询效率会降低,那么可以试着使用B树。
    不过实现B树的算法使用起来太麻烦了……多种不同的记录,可以用不同的结构体实现,
    链表中只记录结构体的地址,而不使用结构体,就可以实现在一个链表中挂多种记录了。
      

  2.   

    你把文件中的内容读取出来,用一个map把她们存起来。
    就这样的:Class CContents;//or Struct CContents
    这个是存放内容的
    map<int,CContents>m_Map;//关键字是唯一的ID号,后面的CContents是存放相应ID对应的内容。
    再要找对应ID的时候,直接用m_Map查找 。
      

  3.   

    我的文件记录包含多个long型的Flag,相同的FLAG里面又含有多条不同的数据(假如如ID,成绩)等,然后我想在read文件的时候,一次读取出来,并且可以像树形结构那样排好序,排序的时候,记录 的位置不变化,只改变索引,然后当我要get_id(flag,(排序的条件:ID OR 成绩),INDEX(第几条记录)),不用再遍历整个文件,从而提高效率,请问要怎么样实现呢??
      

  4.   

    感觉你不知道怎么做了嘛 用链表存储你的结构体就行了!至于链表map vector 都可以
      

  5.   

    结构体如下:
    typedef struct _OEVT
    {
    long lCount;
    long field;
    bool ModifyFlag;
    long *pOEvt
    }*LPOEVT,OEVT;
    全局声明:LPOEVT m_pOEvt[256][6];
    在使用时分配空间:
    m_pOEvt[10][0]->pOEvt=new long[count];
    m_pOEvt[20][0]->pOEvt=new long[1000];
    为什么在我分配空间的时候报错啊,好像是指针错误,请教这个问题怎么解决?