C++map(unordered_map) 的小于号
之前打题的时候想从一个map中取出值最大的元素
然后顺手就写了
auto mx = max_element(mp.begin(), mp.end());
然后怎么调都调不出来样例=_=
后来冷静分析了一下
m
a
p
<
T
1
,
T
2
>
map<T1, T2>
map<T1,T2>中的每个元素都是
p
a
i
r
<
T
1
,
T
2
>
pair<T1, T2>
pair<T1,T2>,
所以
m
a
x
_
e
l
e
m
e
n
t
max\_element
max_element调用的应该是
p
a
i
r
<
T
1
,
T
2
>
pair<T1, T2>
pair<T1,T2>的小于号
即先比较
f
i
r
s
t
first
first, 再比较
s
e
c
o
n
d
second
second
看了下源码果然如此
(在stl_pair.h中)
template<class _T1, class _T2>
inline _GLIBCXX_CONSTEXPR bool
operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
{
return __x.first < __y.first
|| (!(__y.first < __x.first) && __x.second < __y.second);
}
所以想取出值最大的元素,需要给 m a x _ e l e m e n t max\_element max_element传入一个 c m p 函 数 cmp函数 cmp函数
auto mx = max_element(mp.begin(), mp.end(), [](const pair<int, int> &x, const pair<int, int> &y){
return x.second < y.second;
});
传入的 c m p cmp cmp定义的是 o p e r a t o r < operator< operator<,注意别写反