二进制搜索D 2.0(Phobos)?

Meh*_*dad 11 d binary-search phobos

它只是我,还是Phobos中没有二进制搜索功能?我有一个预先排序的数组,我想用我自己的比较器函数进行搜索,但我在std.algorithms或std.containers中找不到任何东西.

谢谢!

Mat*_*tis 16

使用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));
Run Code Online (Sandbox Code Playgroud)

  • `find()`(因此`canFind()`)实际上非常聪明,根据给定的输入类型使用不同的算法.为了使二进制搜索起作用,必须对数据进行排序,因此`assumeSorted()`使它成为,然后`find()`和`canFind()`足够聪明,知道二进制搜索是那么最好的搜索,就是他们所做的. (6认同)
  • 如果您只是尝试进行二分查找,那么它根本不直观. (3认同)