我有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
我该如何解决这个问题?
答案 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 < ()