首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

请问一种数据结构可以实现类似多表的功能

2012-08-10 
求助:请教一种数据结构可以实现类似多表的功能这个题目不知描述得合不合适 具体描述如下:结点的数据大概定

求助:请教一种数据结构可以实现类似多表的功能
这个题目不知描述得合不合适 具体描述如下:
结点的数据大概定义如下:

C/C++ code
struct{   int a;   int b;   int c;   int data;   //指针域相关成员}

其中a,b,c是结点的标识符,每个结点的取值不同,例如(0,0,0),(0,1,0)等
我需要通过a,b,c的取值查找data的值

首先将具有相同的a的取值的结点组合到一起,形成一个队列,例如
(0,0,0)->(0,0,1)->(0,1,0)->(0,1,1)
然后按照a的值,按从小到大的顺序将之前组合的队列拍好,例如
(0,0,0)->(0,0,1)->(0,1,0)->(0,1,1)
   
  ﹀
(1,0,0)->(1,0,1)->(1,1,0)->(1,1,1)

  ﹀
(2,0,0)->(2,0,1)->(2,1,0)->(2,1,1)

  ﹀
(3,0,0)->(3,0,1)->(3,1,0)->(3,1,1)
所有的数据都如上所示是有序排列的,有没有什么比较好的结构可以实现快速的查找
在查找时需返回比给定检索值小的所有结点
例如要查找(1,0,1)则返回(0,0,0),(0,0,1),(1,0,0),(1,0,1)
请问有什么树结构和图结构能够实现这个功能
谢谢


[解决办法]
插入时自动排序的数据结构是map <int, string>
如果a,b,c都是个位数,那就将a*100+b*10+c(也就是三位数abc)作为key,字符串(a,b,c)作为value
检索的时候find()可以直接返回位置,然后用逆向迭代器输出当前位置之前的所有数据

[解决办法]
abc的数据范围是多少,如果数据范围不大的话可以考虑用三维数组 a[][][]哈
[解决办法]
或者用一个typedef struct{int a,b,c} Key; map<Key,int>
[解决办法]
可以利用b树 网上很多相关介绍

热点排行