D 2.0中的二进制搜索(Phobos)?

问题描述:

这仅仅是我,还是在火卫二没有二进制搜索功能?我有一个预先分类的数组,我想用自己的比较函数进行搜索,但是我在std.algorithms或std.containers中找不到任何东西。D 2.0中的二进制搜索(Phobos)?

谢谢!

使用SortedRangestd.range

从那儿剽窃http://www.digitalmars.com/d/2.0/phobos/std_range.html#SortedRange

auto a = [ 1, 2, 3, 42, 52, 64 ]; 
auto r = assumeSorted(a); 
assert(r.canFind(3)); 
assert(!r.canFind(32)); 
+0

啊,你必须使用 “assumeSorted” ......没想到的是,谢谢! :) – Mehrdad 2011-01-07 04:36:43

+6

'find()'(因此'canFind()')实际上非常聪明,使用基于它给定的输入类型的不同算法。为了使二进制搜索起作用,数据必须被排序,所以'assumeSorted()'使它成为,然后find()和canFind()足够聪明以知道二进制搜索是那么最好的搜索,那就是他们所做的。 – 2011-01-07 11:33:23

+3

尽管如果您只是试图进行二分法搜索,但它并不直观。 – Trass3r 2012-05-11 18:42:02