[英]In c++11, how can I call std::max on a vector?
我有一個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
我怎么解決這個問題?
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)
可能更靈活地使用lambda
vector<data> vd;
auto it = max_element(vd.cbegin(), vd.cend(), [](const data& left, const data& right)
{
return (left < right);
});
你應該通過data::operator < ()
為你的類型“data”實現compare的data::operator < ()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.