Tôi hiểu tập hợp STL dựa trên cấu trúc dữ liệu trừu tượng của cây tìm kiếm nhị phân. Vậy cấu trúc dữ liệu cơ bản là gì? Một mảng?
Như những người khác đã chỉ ra, nó thay đổi. Một tập hợp thường được thực hiện như một cây (cây đỏ đen, cây cân bằng, vv) mặc dù nhưng có thể có các triển khai khác tồn tại.
Ngoài ra, cách insert() hoạt động đối với được đặt?
Nó phụ thuộc vào việc triển khai cơ bản của tập hợp của bạn.Nếu nó được thực hiện như một cây nhị phân, Wikipedia có triển khai đệ quy mẫu cho hàm insert(). Bạn có thể muốn kiểm tra xem nó ra.
Bộ kiểm tra xem phần tử đã tồn tại trong đó chưa?
Nếu nó được triển khai dưới dạng cây, nó sẽ đi qua cây và kiểm tra từng phần tử. Tuy nhiên, bộ không cho phép lưu trữ các phần tử trùng lặp. Nếu bạn muốn một tập hợp cho phép các phần tử trùng lặp, thì bạn cần một multiset.
Tôi đọc trên wikipedia theo cách khác để triển khai bộ có bảng băm . Làm thế nào điều này sẽ làm việc?
Bạn có thể tham chiếu đến hash_set, nơi tập hợp được triển khai bằng bảng băm. Bạn cần cung cấp hàm băm để biết vị trí nào lưu trữ phần tử của bạn. Triển khai này lý tưởng khi bạn muốn có thể tìm kiếm phần tử nhanh chóng. Tuy nhiên, nếu điều quan trọng đối với các yếu tố của bạn được lưu trữ theo thứ tự cụ thể, thì việc triển khai cây phù hợp hơn vì bạn có thể duyệt qua các đơn đặt hàng trước, inorder hoặc postorder.
Theo như tôi biết, std :: set là vùng chứa có thứ tự. Nếu một BST của nó như thế nào có thể vượt qua được đặt hàng? – Shasha99