首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

数据查寻

2013-10-15 
数据查找有一个这样的数据结构: struct node{int addr int len}现有这样的几个节点: a{addr 1len

数据查找
有一个这样的数据结构: struct node{
int addr; 
int len;
    };


现有这样的几个节点: a{
addr = 1;
len = 10;
      }

     b{
addr = 15;
len = 5;
      }

     c{
addr = 30;
len = 10
      }
这几个节点内地址不会重叠。

现在的问题是: 任意给出一个数,要非常快的判断出这个值是否在这几个节点里的地址范围内,并且检索出在哪个节点内。(比如给出17, 立马要检索出是b 这个节点, 如果给出35, 立马检索出是c这个节点, 不能用循环判断), 那用什么数据结构组织这几个节点, 不知道c++的容器,有没有好的方法。
[解决办法]
有序的都可以,STL的map即可 ,定位时可用equal_ranges确定lower和upper
[解决办法]
这是线段树吧。
[解决办法]
可以给你提供点思路:利用STL的equal_ranges确定lower&upper,不用循环那你就判断所取值和两端值的比较来确定他的地址范围。
[解决办法]

引用:
Quote: 引用:

有序的都可以,STL的map即可 ,定位时可用equal_ranges确定lower和upper


这几个节点的顺序不是根据节点中的addr排序的,是无序的, 我遇到的问题是我程序频繁检索,并且要求效率要高, 我没学过C++, 我先研究一下c++的容器。


无序的先排序
std::sort
用数组就行
写个node比较的函数,比较addr
查找用折半

热点排行