You are on page 1of 9

3.

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ó.

Đặc điểm của Set:

- 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

Khai báo sử dụng: #include <algorithm>


- Các hàm trong STL Algorithm khá nhiều nên mình chỉ giới thiệu sơ qua
về một số
hàm hay sử dụng trong các bài toán.
- Có một lưu ý nhỏ cho các bạn là khi sử dụng các hàm mà thực hiện trong
một đoạn
phần tử liên tiếp nào đó thì các hàm trong c++ thuờng có tác dụng trên nửa đoạn
[..).
Ví dụ như: bạn muốn hàm f có tác dụng trong đoạn từ 1n thì các bạn phải gọi
hàm
trong đoạn từ 1 -> n+1.
 Các hàm phổ biến trong Algorithm:
a.  Hàm sắp xếp – Sort
Thư viện thuật toán trong C++ cung cấp hàm giúp bạn thực hiện sắp xếp dãy số
dạng mảng, vector trong C++ cực kì nhanh. Là một hàm được biên soạn sẵn,
bạn chỉ cần áp dụng vào và sử dụng. Mặc định là sắp xếp tăng dần.

Cấu trúc hàm:

Trong đó:

 First là phần tử đầu của dãy


 Last là phần tử cuối cùng của dãy + 1 ( tức là nó sẽ sắp xếp từ vị trí
bắt đầu đến trước phần tử last)
 Comp (compare) là tham số giúp bạn chọn sắp xếp tăng hay giảm.
Nếu bạn không truyền tham số này mặc định sẽ là sắp xếp tăng dần.
Có 2 tham số để truyền: greater (dùng cho sắp xếp giảm) less (dùng
cho sắp xếp tăng)
Ví dụ:
b. Hàm Swap

- 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.

Cấu trúc hàm:

Kết quả thu được sẽ là: 10 20 30 40 50 60 70

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

e. Hàm Min, Max

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:

Kết quả: Min =2, Max =7


 

Thư viện String C++


- String là một kiểu đặc biệt của container, thiết kế đặc để hoạt động với các
chuỗi kí tự.
- Khai báo: #include <string>
- Iterator: Tương tự như trong container, string cũng hỗ trợ các iterator như
begin, end, rbegin, rend với ý nghĩa như trước.
- Nhập, xuất string:
o Sử dụng toán tử >> : tương tự như trong C. Nhập đến khi gặp dấu
cách.
o Sử dụng getline: giống như gets trong C. Nhập cả một dòng kí tự
(chứa cả dấu cách nếu có) cho string.
o Xuất string: sử dụng toán tử << như bình thuờng.
Các hàm thành viên:
- Trong string bạn có thể sử dụng các toán tử “=” để gán giá trị cho string, hay
toán tử ”+” để nối hai string với nhau, hay toán tử “==”,”!=” để so sánh. Chức
năng này khá giống với xâu ở trong ngôn ngữ pascal.
- Capacity:
o size: trả về độ dài của string
o length: trả về độ dài của string
o clear : xóa string
o empty: return true nếu string rỗng, false nếu ngược lại
- Truy cập đến phần tử:
o operator [chỉ_số]: lấy kí tự vị trí chỉ_số của string
- Chỉnh sửa:
o push_back: chèn kí tự vào sau string
o insert (n,x): chèn x vào string ở trước vị trí thứ n. x có thể là string,
char,...
o erase (pos,n): xóa khỏi string “n” kí tự bắt đầu từ vị trí thứ “pos”.
o erase (iterator): xóa khỏi string phần tử ở vị trí iterator.
o replace (pos, size, s1) : thay thế string từ vị trí “pos”, số phần tử thay thế
là “size” và thay bằng xâu s1.
Tài liệu tham khảo
1. https://viblo.asia/p/tap-hop-set-va-mot-so-ung-dung-bWrZnQynKxw
2. https://www.studocu.com/vn/document/hoc-vien-cong-nghe-buu-chinh-
vien-thong/tieng-anh/stl-lecture-notes-1/22797738
3. https://www.iostream.vn/modern-cpp/mot-so-ham-huu-ich-trong-thu-
vien-algorithm-c-stl-DXnHz
4. https://duongdinh24.com/thu-vien-algorithm-trong-c/

You might also like