stl map C ++中的最高值?

时间:2014-02-18 17:22:32

标签: c++ map stl

我有一个这样的地图,枚举为关键字,UINT为值。

    #include <iostream>
    #include <string>
    #include <map>

    using namespace std;

    typedef enum tcGroup_t
    {
        CG_NONE      = 0,
        CG_BASE      = 1, 
        CG_RC        = 3,
        CG_HTD       = 4,
        CG_HID       = 5
    } tcGroup;


    int getMaxtcGroupCount() 
    {
        std::map<tcGroup, UINT> maxTcGroup;
        maxTcGroup [CG_BASE] = 2;
        maxTcGroup [CG_HID]  = 33;
        maxTcGroup [CG_HTD]  = 44;
        maxTcGroup [CG_RC]   = 87;
        maxTcGroup [CG_NONE] = 39;
    }

基本上,我想将地图中的最高值返回给调用函数。在上面的例子中,我想返回值87.我知道地图是通过Key排序的,但在我的情况下,我想要返回地图中的最高值?

感谢任何帮助。感谢

2 个答案:

答案 0 :(得分:5)

您可以将std::max_element与合适的仿函数一起使用。

bool cmp(const std::pair<const tcGroup, UINT>& rhs,
         const std::pair<const tcGroup, UINT>& lhs)
{
  return rhs.second < lhs.second;
}

然后

auto max_iter = max_element(maxTcGroup.begin(), maxTcGroup.end());

答案 1 :(得分:3)

您可以将std::max_element与自定义比较器一起使用:

#include <map>
#include <algorithm>
#include <iostream>
#include <cassert>

int main()
{
    typedef std::map<char, int> M;

    M m;
    m['a'] = 5;
    m['b'] = 8;
    m['c'] = 2;

    M::const_iterator it = std::max_element(
        std::begin(m), std::end(m),
        [](M::value_type& lhs, M::value_type& rhs) {
            return lhs.second < rhs.second;
        }
    );

    assert(it != m.end());
    std::cout << it->first << '\n';  // 'b'
}

Live demo