簡體   English   中英

在c ++ 11中,如何在向量上調用std :: max?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM