2015-06-03 13 views
5

Tôi đang cố gắng để có được những yếu tố có giá trị tối đa từ std :: bản đồ,tìm yếu tố có giá trị tối đa từ std :: map

int main() { 
    map<int, int> m; 
    m[1] = 100; 
    m[2] = -1; 

    auto x = std::max_element(m.begin(), m.end(), m.value_comp()); 

    cout << x->first << " : " << x->second << endl; 
} 

lý do tại sao nó in phần tử thứ hai 2 : -1?

+0

Hmmm ... 'std :: max_element()' có vẻ là so sánh các phím của bản đồ – Levi

+1

http: //en.cppreference .com/w/cpp/container/map/value_comp – juanchopanza

Trả lời

9

Taken từ here:

auto x = std::max_element(m.begin(), m.end(), 
    [](const pair<int, int>& p1, const pair<int, int>& p2) { 
     return p1.second < p2.second; }); 

này, thay vì sử dụng std::map::value_comp() (mà so sánh giá trị key) nhìn vào second thành viên trong cặp, trong đó có giá trị. Điều này sử dụng một biểu thức lambda, vì vậy bạn sẽ phải biên dịch với C++ 11 hỗ trợ

+1

Tôi đồng ý với câu trả lời này. Nó có thể được viết một chút chung chung hơn, mặc dù. Nếu bạn biết 'm' là kiểu' M', bạn có thể viết '[] (const M :: giá trị_type & p1, const M :: giá trị_type & p2)'. Thật mạnh mẽ khi gõ các thay đổi trong 'M' nhưng có một sự không cần thiết ở đây – IceFire

2

http://www.cplusplus.com/reference/map/map/value_comp/

Returns a comparison object that can be used to compare two elements to get whether 
the key of the first one goes before the second. 

và 2> 1. value_comp so sánh giá trị quan trọng, không phải là giá trị giá trị. Bởi vì đó là cách cuộn C++.

Các vấn đề liên quan