2011-01-07 51 views
11

這僅僅是我,還是在火衛二沒有二進制搜索功能?我有一個預先分類的數組,我想用自己的比較函數進行搜索,但是我在std.algorithms或std.containers中找不到任何東西。D 2.0中的二進制搜索(Phobos)?

謝謝!

回答

16

使用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