2011-08-27 26 views
20

Trong boost::unordered_map làm cách nào để xác định xem khóa có tồn tại trong đó hay không?C++ boost unordered_map - xác định xem khóa có tồn tại trong vùng chứa

boost::unordered_map<vector<int>, MyValueType> my_hash_map; 

if (my_hash_map[non-existent key] == NULL) 

Các bị trên lỗi biên dịch "không phù hợp cho nhà điều hành '==' ..."

là vấn đề mà tôi đang sử dụng một loại giá trị tùy chỉnh hay cái gì khác?

Trả lời

30

Bạn có thể sử dụng phương pháp find:

if (my_hash_map.find(non-existent key) == my_hash_map.end()) 
+4

... như với bất kỳ container tiêu chuẩn tuân thủ, bằng cách này. – xtofl

+0

Theo dõi nhanh, điều này vẫn được thực hiện trong O (1)? Cảm ơn! – gewizz

+2

Tôi giả sử như vậy, vì unordered_map là một bảng băm. –

25

exist() được đánh vần count() cho bất kỳ associative container:

if (my_hash_map.count(key)) { /*key exist*/ } 

if (!my_hash_map.count(key)) { /*key does not exist*/ } 
+5

Không phải là vấn đề thường, nhưng tôi có thể tưởng tượng 'count()' đắt hơn đặc biệt là nếu bạn có nhiều giá trị cho mỗi khóa, bởi vì nó phải thực sự lặp trên tất cả chúng. –

+0

@ Lukáš Lalinský: Có, đối với 'multi_ *' containers 'count()' có thể có hiệu năng tồi tệ hơn 'find()'. – dalle

+0

Tùy thuộc vào kích thước 'my_hash_map', người ta vẫn có thể sử dụng phương thức' .count() '(chứ không phải' .find() '), vì nó xử lý chính xác trường hợp biên mà' my_hash_map' chứa một khóa/giá trị (s) cặp. – Kris

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