2011-01-07 21 views
11

Phobosには私だけか、バイナリ検索機能はありませんか?私は自分のコンパレータ関数で検索したいプリソートされた配列を持っていますが、std.algorithmsやstd.containersには何も見つかりません。D 2.0のバイナリ検索(Phobos)?

ありがとうございます! std.rangeから

答えて

16

使用SortedRange

Cribbed 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

+6

'find()'(したがって 'canFind()')は、実際にはかなりスマートです。バイナリ検索が機能するためには、データをソートする必要があります。したがって、 'assumeSorted()'はそれをそうするようにします。そして 'find()'と 'canFind()'はバイナリ検索がその後、最良の検索、それは彼らが何をしているかです。 –

+3

バイナリ検索をしようとしているのであれば、それは直感的ではありません。 – Trass3r