c++日本語リファレンスstd::lower_bound
https://cpprefjp.github.io/reference/algorithm/lower_bound.html
の内容についての質問です。
要件に、
[first,last) の要素 e は e < value または comp(e, value) によって区分化されていること。 つまり、e < value または comp(e, value) が true となる全ての要素 e は、false となる全ての要素よりも左側(first に近い方)になければならない。
とありますが、"Calrol" < "Bob" はFalseで "Alice" < "Bob"はTrueとなり、例文にあるソースコードは要件を満たしていないように見えます。実際のところ、当リファレンスの例は正しいのでしょうか。
よろしくおねがいします。
該当のソースコード
c++
1#include <bits/stdc++.h> 2 3struct X { 4 int id; 5 std::string name; 6}; 7 8int main(){ 9 // 要素は複数のメンバ変数をもつ 10 std::vector<X> v = { 11 {1, "Carol"}, 12 {3, "Alice"}, 13 {4, "Bob"}, 14 {5, "Eve"}, 15 {6, "Dave"} 16 }; 17 18 const std::string key = "Bob"; 19 20 // X::nameメンバ変数をキーにして、 21 // X::name == "Bob"となる要素を二分探索で見つける 22 decltype(v)::iterator it = std::lower_bound( 23 v.begin(), 24 v.end(), 25 X{-1, key}, // nameのみを比較するので、idの値はなんでもよい 26 [](const X& a, const X& b) { return a.name < b.name; } 27 ); 28 29 if (it != v.end() && it->name == key) { 30 std::size_t pos = std::distance(v.begin(), it); 31 std::cout << "id=" << it->id 32 << " name=" << it->name 33 << " pos=" << pos 34 << std::endl; 35 } 36 return 0; 37}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2022/10/17 17:38
退会済みユーザー
2022/10/17 19:18