Professional Documents
Culture Documents
BLL C
BLL C
ASSOCIATIVE CONTAINERS
Trong các thư viện mẫu, chúng đề cập đến nhóm các mẫu lớp được sử dụng để
triển khai Associative containers. Chúng được sử dụng để lưu trữ các phần tử
nhưng có một số ràng buộc được đặt trên các phần tử này.
a. Set
Đúng như tên gọi của nó, tập hợp (set) là một cấu trúc dữ liệu dạng giống
như mảng, lưu một danh sách các phần tử. Bản chất cấu trúc này được xây dựng
dựa trên cấu trúc dữ liệu cây tìm kiếm nhị phân, nhưng nó đã phổ biến đến mức
người ta quên đi cách cài đặt gốc của nó.
- Set là một loại associative containers để lưu trữ các phần tử không bị
trùng lặp (unique elements), và các phần tử này chính là các khóa (keys).
- Khi duyệt set theo iterator từ begin đến end, các phần tử của set sẽ tăng
dần theo phép toán so sánh.
- Mặc định của set là sử dụng phép toán less, bạn cũng có thể viết lại hàm
so sánh theo ý mình.
- Set được thực hiện giống như cây tìm kiếm nhị phân (Binary search tree)
Ví dụ minh họa
b. Multiset
- Multiset giống như Set nhưng có thể chứa các khóa có giá trị giống nhau.
- Khai báo : giống như Set.
Ví dụ minh họa:
c. Map
- Map là một loại Associative Containers. Mỗi phần tử của map là sự kết
hợp của khóa (key value) và ánh xạ của nó (mapped value). Cũng giống
như set, trong map không chứa các khóa mang giá trị giống nhau.
Đặc điểm của Map:
- Trong map, các khóa được sử dụng để xác định giá trị các phần tử. Kiểu
của khóa và ánh xạ có thể khác nhau.
- Và cũng giống như set, các phần tử trong map được sắp xếp theo một
trình tự nào đó theo cách so sánh.
- Map được cài đặt bằng red-black tree (cây đỏ đen) – một loại cây tìm
kiếm nhị phân tự cân bằng. Mỗi phần tử của map lại được cài đặt theo
kiểu pair
Ví dụ minh họa
d. Multimap
- Giống như Map nhưng có thể chứa các phần tử có khóa giống nhau, do
đó nó khác map ở chỗ không có opearator[]
Ví dụ minh họa
III. ALGORITHMS
Trong đó:
- Swap là hàm thực hiện hoán đổi giá trị giữa hai phần tử a và b một cách
nhanh nhất. Hàm này có thể thực hiện cho nhiều kiểu dữ liệu khác nhau.
Nhưng hai dữ liệu cần đổi chỗ cần cùng một loại. Thông thường ta
thường sử dụng hàm này trong việc hoán đổi dữ liệu kiểu số (int, doube, .
. .).
Cấu trúc:
Cách dùng:
Kết quả thu được sẽ là:
a=6
b=5
c. Hàm Copy
Hàm copy dùng để copy dữ liệu từ dãy a sang dãy b. Tức là ta copy toàn dữ liệu
trong danh sách một cách nhanh nhất. Có các tham số truyền vào để xác định
các phần tử cần copy.
d. Hàm Reverse
Reverse tiếng anh có nghĩa là đảo ngược, C++ hỗ trợ hàm này với mục đích đảo
lộn vị trí phần tử trong dãy. Giả sử bạn có dãy đã sắp xếp theo chiều tăng dần,
sử dụng hàm này dãy sẽ thành chiều giảm dần.
Ví dụ:
Kết quả thu được sau khi Đảo: 5 4 3 2 1
Hàm min, max có tác dụng trả về giá trị tương ứng là phần tử lớn nhất, nhỏ nhất
trong hai số a, b truyền vào với cùng kiểu dữ liệu. Hàm này chúng ta có thể
hoànn toàn tự định nghĩa được, tuy nhiên trong một số trường hợp thì sử dụng
hàm được viết sẵn sẽ giúp bạn tiết kiệm rất nhiều thời gian.
Ví dụ cách sử dụng: