2013-11-27 37 views
7

Ben bir vector<data> (data kendi evcil hayvan türü olduğu) ve maksimum değerini bulmak istiyoruz., nasıl bir vektör üzerinde std :: max arayabilirim?

C++ 11 görünmeden standart std::max fonksiyon nesneler topluluğu üzerinde çalışmak için, ancak vector gibi değil, bir koleksiyon ilk argüman olarak bir başlatıcı listesi istiyor: Ben çözebilir nasıl

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 

bu ?

cevap

18

std::max aşırı yükler yalnızca derleme zamanında bilinen küçük kümeler içindir. Ne gerek (hatta ön-11 olan) std::max_element olduğunu. daha esnek Sadece kendi türü "veri" için karşılaştırmak operatörü uygulamalıdır

vector<data> vd; 

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

lambda'da Muhtemelen

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

: Bu koleksiyonun en fazla elemana bir yineleyici (veya herhangi bir yineleyici aralığı) döndürür data::operator <()

+0

aracılığıyla Neden 'left.some_data paceholder

+0

kötü değil, ben yukarıda kodumu tamir edeceğim döndürmez – angevad