2013-11-27 57 views
7

我有一個vector<data>(其中data是我自己的寵物類型),我想找到它的最大值。在C++ 11中,如何在矢量上調用std :: max?

在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 

我該如何解決這個 ?

回答

18

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
與拉姆達更靈活

vector<data> vd; 

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

你剛纔應該實施比較適合於您的「數據」的操作

可能通過data::operator <()

+0

爲什麼不'返回left.some_data paceholder

+0

不壞,我會修復上面的代碼 – angevad

相關問題