2010-10-30 45 views

回答

14

您使用std::min_elementstd::max_element。例如,給定一個std::vector<int>

std::vector<int> v; 
std::vector<int>::iterator it = std::max_element(v.begin(), v.end()); 
// 'it' points to the largest element in 'v' 

如果你想使用其他比operator<,你需要編寫一個自定義的比較的東西(這是默認情況下使用)比較元素:

bool compare_donut_diameters(const Donut& x, const Donut& y) 
{ 
    return x.diameter < y.diameter; 
} 

用作:

std::vector<Donut> v; 
std::vector<Donut>::iterator it = std::max_element(v.begin, v.end(), 
                compare_donut_diameters); 

您還可以使用函數對象(也稱爲函子)實現比較器,或者如果您的編譯器支持lambda表達式NS可以使用lambda:

auto it = std::max_element(v.begin(), v.end(), 
    [](const Donut& x, const Donut& y) { return x.diameter < y.diameter; }); 
+1

是的,它肯定會需要一段時間才能弄清楚如何在80列;-) – 2010-10-30 20:43:53

+0

@Steve使用lambda函數:認真!我想我重新格式化了最後一個例子四次...這是一件好事,寬屏顯示器更普遍。我來了240個字符行! – 2010-10-30 20:45:52

+0

C++ 0x看起來很國外...「auto」,匿名函數...... pfft :-) – bjoernz 2010-10-30 20:46:24

1

您可以使用std::min_element

// You can use a functor instead! 
bool compare_donut(const Donut& lhs, const Donut& rhs) 
{ return lhs.diameter < rhs.diameter; } 
... 
// min_donut is an iterator to the smallest donut in donut_vector. 
std::vector<Donut>::iterator min_donut = 
    std::min_element(donut_vector.begin(), donut_vector.end(), compare_donut); 

如果你想獲得最大的,你可以使用std::max_element用相同的比較。