回答編集履歴

1

追加説明

2020/04/23 10:31

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -7,3 +7,29 @@
7
7
  std::binary_search の comp は
8
8
 
9
9
  comp(const T& a, const T& b) { return a < b; } だから、速いのではありませんか?
10
+
11
+
12
+
13
+
14
+
15
+ もうひとつ。
16
+
17
+
18
+
19
+ バイナリサーチでは、結果が求まるまで何回か比較を行います。
20
+
21
+ comp_result == 0 は最後まで true にならないので、
22
+
23
+ comp_result == 0 と comp_result < 0 の 2回の比較が常に行われます。
24
+
25
+
26
+
27
+ std::binary_search では comp が less なので、
28
+
29
+ if (key < *mid) end = mid;
30
+
31
+ else if (*mid < key) it = mid, ++it;
32
+
33
+ else return mid;
34
+
35
+ になっていて、比較が 1回で済む場合があるのではないでしょうか?