C++:使用 boost lambda 获取 std::tr1::unordered_map 中的最大值

标签 c++ algorithm boost lambda

我有一个 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;

测试:https://ideone.com/V6SZL

使用 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/

相关文章:

algorithm - 统计总和大于或等于 k ​​的子集的个数

c++ - 使用 boost::function 通过函数指针调用 C++ 类方法

c++ - Linux Mint 19 上的 CMake 3.11 无法找到静态 Boost 库

c++线程池:用于将函数/lambdas传递给线程的std::function的替代方法?

c++ - 为什么将 "score[11] = {};"和 "grade"声明为 "unsigned"而不是 "int'

c++ - 如何使用点云库查找点云的主成分和方向

c++ - Flash 可以检测正在拍摄的屏幕截图(或 GDI bitcopy)吗?

java - codility 测试回顾 - pair_sum_even_count

algorithm - 关于AVL树的插入操作

c++ - 如何在元组上使用 boost::algorithm::join?