3434#include < __type_traits/is_swappable.h>
3535#include < __type_traits/remove_const.h>
3636#include < __utility/forward.h>
37+ #include < __utility/lazy_synth_three_way_comparator.h>
3738#include < __utility/move.h>
3839#include < __utility/pair.h>
3940#include < __utility/swap.h>
@@ -1749,14 +1750,18 @@ __tree<_Tp, _Compare, _Allocator>::__find_equal(const _Key& __v) {
17491750 }
17501751
17511752 __node_base_pointer* __node_ptr = __root_ptr ();
1753+ auto __comp = __lazy_synth_three_way_comparator<_Compare, _Key, value_type>(value_comp ());
1754+
17521755 while (true ) {
1753- if (value_comp ()(__v, __nd->__get_value ())) {
1756+ auto __comp_res = __comp (__v, __nd->__get_value ());
1757+
1758+ if (__comp_res.__less ()) {
17541759 if (__nd->__left_ == nullptr )
17551760 return _Pair (static_cast <__end_node_pointer>(__nd), __nd->__left_ );
17561761
17571762 __node_ptr = std::addressof (__nd->__left_ );
17581763 __nd = static_cast <__node_pointer>(__nd->__left_ );
1759- } else if (value_comp ()(__nd-> __get_value (), __v )) {
1764+ } else if (__comp_res. __greater ( )) {
17601765 if (__nd->__right_ == nullptr )
17611766 return _Pair (static_cast <__end_node_pointer>(__nd), __nd->__right_ );
17621767
@@ -2065,10 +2070,12 @@ template <class _Key>
20652070typename __tree<_Tp, _Compare, _Allocator>::size_type
20662071__tree<_Tp, _Compare, _Allocator>::__count_unique(const _Key& __k) const {
20672072 __node_pointer __rt = __root ();
2073+ auto __comp = __lazy_synth_three_way_comparator<value_compare, _Key, value_type>(value_comp ());
20682074 while (__rt != nullptr ) {
2069- if (value_comp ()(__k, __rt->__get_value ())) {
2075+ auto __comp_res = __comp (__k, __rt->__get_value ());
2076+ if (__comp_res.__less ()) {
20702077 __rt = static_cast <__node_pointer>(__rt->__left_ );
2071- } else if (value_comp ()(__rt-> __get_value (), __k ))
2078+ } else if (__comp_res. __greater ( ))
20722079 __rt = static_cast <__node_pointer>(__rt->__right_ );
20732080 else
20742081 return 1 ;
@@ -2082,11 +2089,13 @@ typename __tree<_Tp, _Compare, _Allocator>::size_type
20822089__tree<_Tp, _Compare, _Allocator>::__count_multi(const _Key& __k) const {
20832090 __end_node_pointer __result = __end_node ();
20842091 __node_pointer __rt = __root ();
2092+ auto __comp = __lazy_synth_three_way_comparator<value_compare, _Key, value_type>(value_comp ());
20852093 while (__rt != nullptr ) {
2086- if (value_comp ()(__k, __rt->__get_value ())) {
2094+ auto __comp_res = __comp (__k, __rt->__get_value ());
2095+ if (__comp_res.__less ()) {
20872096 __result = static_cast <__end_node_pointer>(__rt);
20882097 __rt = static_cast <__node_pointer>(__rt->__left_ );
2089- } else if (value_comp ()(__rt-> __get_value (), __k ))
2098+ } else if (__comp_res. __greater ( ))
20902099 __rt = static_cast <__node_pointer>(__rt->__right_ );
20912100 else
20922101 return std::distance (
@@ -2159,11 +2168,13 @@ __tree<_Tp, _Compare, _Allocator>::__equal_range_unique(const _Key& __k) {
21592168 using _Pp = pair<iterator, iterator>;
21602169 __end_node_pointer __result = __end_node ();
21612170 __node_pointer __rt = __root ();
2171+ auto __comp = __lazy_synth_three_way_comparator<value_compare, _Key, value_type>(value_comp ());
21622172 while (__rt != nullptr ) {
2163- if (value_comp ()(__k, __rt->__get_value ())) {
2173+ auto __comp_res = __comp (__k, __rt->__get_value ());
2174+ if (__comp_res.__less ()) {
21642175 __result = static_cast <__end_node_pointer>(__rt);
21652176 __rt = static_cast <__node_pointer>(__rt->__left_ );
2166- } else if (value_comp ()(__rt-> __get_value (), __k ))
2177+ } else if (__comp_res. __greater ( ))
21672178 __rt = static_cast <__node_pointer>(__rt->__right_ );
21682179 else
21692180 return _Pp (iterator (__rt),
@@ -2181,11 +2192,13 @@ __tree<_Tp, _Compare, _Allocator>::__equal_range_unique(const _Key& __k) const {
21812192 using _Pp = pair<const_iterator, const_iterator>;
21822193 __end_node_pointer __result = __end_node ();
21832194 __node_pointer __rt = __root ();
2195+ auto __comp = __lazy_synth_three_way_comparator<value_compare, _Key, value_type>(value_comp ());
21842196 while (__rt != nullptr ) {
2185- if (value_comp ()(__k, __rt->__get_value ())) {
2197+ auto __comp_res = __comp (__k, __rt->__get_value ());
2198+ if (__comp_res.__less ()) {
21862199 __result = static_cast <__end_node_pointer>(__rt);
21872200 __rt = static_cast <__node_pointer>(__rt->__left_ );
2188- } else if (value_comp ()(__rt-> __get_value (), __k ))
2201+ } else if (__comp_res. __greater ( ))
21892202 __rt = static_cast <__node_pointer>(__rt->__right_ );
21902203 else
21912204 return _Pp (
@@ -2202,12 +2215,14 @@ pair<typename __tree<_Tp, _Compare, _Allocator>::iterator, typename __tree<_Tp,
22022215__tree<_Tp, _Compare, _Allocator>::__equal_range_multi(const _Key& __k) {
22032216 using _Pp = pair<iterator, iterator>;
22042217 __end_node_pointer __result = __end_node ();
2205- __node_pointer __rt = __root ();
2218+ __node_pointer __rt = __root ();
2219+ auto __comp = __lazy_synth_three_way_comparator<value_compare, _Key, value_type>(value_comp ());
22062220 while (__rt != nullptr ) {
2207- if (value_comp ()(__k, __rt->__get_value ())) {
2221+ auto __comp_res = __comp (__k, __rt->__get_value ());
2222+ if (__comp_res.__less ()) {
22082223 __result = static_cast <__end_node_pointer>(__rt);
22092224 __rt = static_cast <__node_pointer>(__rt->__left_ );
2210- } else if (value_comp ()(__rt-> __get_value (), __k ))
2225+ } else if (__comp_res. __greater ( ))
22112226 __rt = static_cast <__node_pointer>(__rt->__right_ );
22122227 else
22132228 return _Pp (__lower_bound (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__end_node_pointer>(__rt)),
@@ -2223,12 +2238,14 @@ pair<typename __tree<_Tp, _Compare, _Allocator>::const_iterator,
22232238__tree<_Tp, _Compare, _Allocator>::__equal_range_multi(const _Key& __k) const {
22242239 using _Pp = pair<const_iterator, const_iterator>;
22252240 __end_node_pointer __result = __end_node ();
2226- __node_pointer __rt = __root ();
2241+ __node_pointer __rt = __root ();
2242+ auto __comp = __lazy_synth_three_way_comparator<value_compare, _Key, value_type>(value_comp ());
22272243 while (__rt != nullptr ) {
2228- if (value_comp ()(__k, __rt->__get_value ())) {
2244+ auto __comp_res = __comp (__k, __rt->__get_value ());
2245+ if (__comp_res.__less ()) {
22292246 __result = static_cast <__end_node_pointer>(__rt);
22302247 __rt = static_cast <__node_pointer>(__rt->__left_ );
2231- } else if (value_comp ()(__rt-> __get_value (), __k ))
2248+ } else if (__comp_res. __greater ( ))
22322249 __rt = static_cast <__node_pointer>(__rt->__right_ );
22332250 else
22342251 return _Pp (__lower_bound (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__end_node_pointer>(__rt)),
0 commit comments