C++map(unordered_map) 的小于号

之前打题的时候想从一个map中取出值最大的元素
然后顺手就写了

    auto mx = max_element(mp.begin(), mp.end());

然后怎么调都调不出来样例=_=

后来冷静分析了一下
m a p &lt; T 1 , T 2 &gt; map&lt;T1, T2&gt; map<T1,T2>中的每个元素都是 p a i r &lt; T 1 , T 2 &gt; pair&lt;T1, T2&gt; pair<T1,T2>
所以 m a x _ e l e m e n t max\_element max_element调用的应该是 p a i r &lt; T 1 , T 2 &gt; pair&lt;T1, T2&gt; 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 &lt; operator&lt; operator<,注意别写反

posted @ 2019-07-09 19:43  Apale  阅读(116)  评论(0编辑  收藏  举报