我有大约1000个元素的列表。每个元素(我从文件中读取的对象,因此我可以在开始时高效地安排它们)包含4个变量。因此,现在我正在执行以下操作,这在整体方案中效率很低:
void func(double value1, double value2, double value3)
{
fooArr[1000];
for(int i=0;i<1000; ++i)
{
//they are all numeric! ranges are < 1000
if(fooArr[i].a== value1
&& fooArr[i].b >= value2;
&& fooArr[i].c <= value2; //yes again value2
&& fooArr[i].d <= value3;
)
{
/* yay found now do something!*/
}
}
}
空间不是太重要!
已根据请求进行了修改
最佳答案
如果空间不太重要,最简单的方法是基于“a”创建哈希,具体取决于您在“a”上遇到的冲突数量,使哈希表中的每个节点都指向一棵二叉树可能很有意义。基于“b”如果b有很多冲突,请对c执行相同的操作。
哈希的第一个索引(取决于有多少冲突)将为您节省大量时间,而只需很少的编码或数据结构即可工作。