D 2.0中的二进制搜索(Phobos)?
问题描述:
这仅仅是我,还是在火卫二没有二进制搜索功能?我有一个预先分类的数组,我想用自己的比较函数进行搜索,但是我在std.algorithms或std.containers中找不到任何东西。D 2.0中的二进制搜索(Phobos)?
谢谢!
答
使用SortedRange
从std.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));
啊,你必须使用 “assumeSorted” ......没想到的是,谢谢! :) – Mehrdad 2011-01-07 04:36:43
'find()'(因此'canFind()')实际上非常聪明,使用基于它给定的输入类型的不同算法。为了使二进制搜索起作用,数据必须被排序,所以'assumeSorted()'使它成为,然后find()和canFind()足够聪明以知道二进制搜索是那么最好的搜索,那就是他们所做的。 – 2011-01-07 11:33:23
尽管如果您只是试图进行二分法搜索,但它并不直观。 – Trass3r 2012-05-11 18:42:02