2013-08-16 11 views
8

Tôi đã cố gắng hiểu tại sao bảng băm (các bộ chứa không theo thứ tự như unordered_map hoặc unordered_set) không cung cấp giao diện truy vấn hoặc thiết lập hệ số tải tối thiểu.Tại sao các thùng chứa không có thứ tự cung cấp một giao diện để xác định hệ số tải tối thiểu?

Say c là một unordered_set, tôi có thể sử dụng

c.max_load_factor() 

để truy vấn

c.max_load_factor(val) 

cho khung cảnh.

Tại sao C++ 11 không cung cấp giao diện truy vấn min_load_factor? Có chi tiết triển khai nào, điều này sẽ giải thích?

Ngoài ra, C++ STL bởi Josuttis, nói rằng:

Yếu tố tải trọng tối thiểu, được sử dụng để buộc rehashing khi số lượng các yếu tố trong co lại chứa không thể bị ảnh hưởng.

+3

Khi đoán, việc loại bỏ các phần tử không phải cấp phát bộ nhớ và không thể thất bại (có thể trừ khi một trình phá hủy bị ném, trong trường hợp này bạn đổ lỗi cho loại phần tử thay vì vùng chứa). Tôi không biết liệu đó có phải là lý do thực sự hay không, có thể có một lý do khác mạnh hơn. –

+2

@SteveJessop: Tôi có thể nói nó phù hợp với một số các thùng chứa khác: không phải 'vector' cũng như' deque' sẽ tự động thu nhỏ. –

+2

Yếu tố tải tối thiểu có nghĩa là gì? Làm thế nào nhỏ nó nhận được trước khi kích thước lại của nó? – andre

Trả lời

1

Hệ số tải trên unordered_map ảnh hưởng đến xác suất va chạm trong bảng băm. Ví dụ: xác suất của hai phần tử được đặt trong cùng một nhóm. Vùng chứa sử dụng giá trị max_load_factor làm ngưỡng buộc tăng số lượng nhóm và do đó gây ra sự phục hồi.

Không có yếu tố tải trọng tối thiểu do người dùng điều khiển vì nó nên tôn trọng số lượng các phần tử đã có trong vùng chứa.

+0

Tôi có thể đồng ý với điều này. Tôi thấy điểm của bạn. –

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