2011-01-07 20 views
11

Sadece ben miyim, yoksa Phobos'da ikili arama fonksiyonu yok mu? Kendi karşılaştırıcı işlevimle aramak istediğim önceden sıralanmış bir dizim var, ancak std.algorithms veya std.containers öğelerinde hiçbir şey bulamıyorum.D 2.0'de (Phobos) İkili Arama mı?

Teşekkürler! std.range den

cevap

16

Kullanım SortedRange:

cribbed http://www.digitalmars.com/d/2.0/phobos/std_range.html#SortedRange den:

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

Ah, beklemiyorduk ... "assumeSorted" kullanmak zorunda, o teşekkürler! :) – Mehrdad

+6

'find()' (ve bu nedenle 'canFind()'), aslında hangi tür girdiye bağlı olarak farklı algoritmalar kullanarak oldukça akıllıdır. İkili aramanın çalışabilmesi için, verilerin sıralanması gerekir, yani 'assumeSorted() 'bunu yapar, sonra' find() 've' canFind() 'ikili aramanın bilindiğini bilecek kadar akıllıdır. En iyi arama o zaman, ve işte bu. –

+3

Sadece bir ikili arama yapmaya çalışıyorsanız, hiç sezgisel değil. – Trass3r