在c ++ 11中,如何在向量上调用std :: max?

时间:2013-11-27 09:37:46

标签: c++ c++11 std initializer-list

我有vector<data>(其中data是我自己的宠物类型),我想找到它的最大值。

C ++ 11中的标准std::max函数似乎适用于对象集合,但它需要初始化列表作为其第一个参数,而不是像vector这样的集合:

vector<data> vd;
std::max(vd); // Compilation error
std::max({vd[0], vd[1], vd[2]}); // Works, but not ok since I don't vd.size() at compile time

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:19)

std::max重载仅适用于编译时已知的小集。你需要的是std::max_element(甚至在11之前)。这会将迭代器返回到集合的最大元素(或任何迭代器范围):

auto max_iter = std::max_element(vd.begin(), vd.end());
// use *max_iter as maximum value (if vd wasn't empty, of course)

答案 1 :(得分:2)

可能更灵活地使用lambda

vector<data> vd;

auto it = max_element(vd.cbegin(), vd.cend(), [](const data& left, const data& right)
    {
    return (left < right);
    });

您应该通过data::operator < ()

为您的“数据”类型实现比较运算符