【发布时间】:2011-01-07 03:54:39
【问题描述】:
只有我一个人,还是Phobos没有二分查找功能?我有一个预排序数组,我想用我自己的比较器函数进行搜索,但在 std.algorithms 或 std.containers 中找不到任何内容。
谢谢!
【问题讨论】:
标签: binary-search d phobos
只有我一个人,还是Phobos没有二分查找功能?我有一个预排序数组,我想用我自己的比较器函数进行搜索,但在 std.algorithms 或 std.containers 中找不到任何内容。
谢谢!
【问题讨论】:
标签: binary-search d phobos
使用来自std.range的SortedRange:
抄自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));
【讨论】:
find()(因此canFind())实际上非常聪明,它根据给定的输入类型使用不同的算法。为了使二分搜索起作用,必须对数据进行排序,所以assumeSorted() 使它成为这样,然后find() 和canFind() 足够聪明,知道二分搜索是最好的搜索,并且他们就是这样做的。