2008-11-14 12 views
26

Tôi đang tìm giá trị khóa cao nhất (được xác định bởi toán tử so sánh) của sơ đồ std ::.Khóa cuối cùng trong một tiêu chuẩn :: bản đồ

Đây có phải là đảm bảo được

map.rbegin()->first 

?

(Tôi là một chút run rẩy trên lặp đảo ngược, và bao nhiêu tự do có trong việc thực hiện std :: bản đồ)

Nếu không, xin vui lòng tư vấn cho. Tôi không thể thay đổi cấu trúc dữ liệu.

Trả lời

32

Có. Bản đồ là một vùng chứa được sắp xếp, trình lặp ngược lại phải trả về các phần tử ngược lại (tức là giảm) thứ tự các khóa của chúng.

[Chỉnh sửa: như Charles Bailey chỉ ra trong câu trả lời của mình, mã của bạn cho chìa khóa lớn nhất nếu nó tồn tại - ví dụ: nếu bản đồ không bị để trống]

20

Vâng, nhưng hãy nhớ kiểm tra xem map.rbegin() != map.rend().

+0

map.size()> 0 nên làm điều đó, quá, phải không? – peterchen

+5

! Map.empty() thậm chí còn rõ ràng hơn. – dalle

+0

Tất cả đều là séc tương đương. –

5

Bạn có thể sử dụng phương pháp sau đây: -

if(!map.empty()) 
    (--map.end())->first;