我有一个 std::tr1::unordered_map<int, A> map;
其中 A 是具有成员变量 (int x) 的类。
我想在 map 中找到使 map[i].x 最大的键 i。
我知道我可以写一个仿函数来配合 std::max_element。我该怎么做,而不是使用 boost lambda(我正在尝试学习它)?我没有 C++0x。
作为一个附加问题,如果我将 A 类定义如下:
A级{ 诠释 x; 诠释y; };
我想找到最大的 w.r.t x(如果那个最大值是 0,找到最大的 wrt 到 y)。 同样,一种解决方案是遍历映射的元组(同时保留 内存中的最大值)。有没有办法修改 max_element 来做到这一点?
最佳答案
boost.lambda 使用 boost.bind 来访问成员变量。它有点罗嗦:
typedef std::tr1::unordered_map<int, A> map_t;
map_t m;
A max_a = std::max_element(m.begin(), m.end(),
bind(&A::x, bind(&map_t::value_type::second, _1))
< bind(&A::x, bind(&map_t::value_type::second, _2))
)->second;
使用 boost.range 可以省去一半的头痛
A max_a = *boost::max_element(m | map_values, bind(&A::x, _1) < bind(&A::x, _2));
但在实践中,我认为仿函数是最好的。
关于C++:使用 boost lambda 获取 std::tr1::unordered_map 中的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5967181/