我有一个这样的地图,枚举为关键字,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排序的,但在我的情况下,我想要返回地图中的最高值?
感谢任何帮助。感谢
答案 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'
}