Std :: map là gì?
Trong C ++, MAP là một vùng chứa kết hợp lưu trữ các mục ở dạng ánh xạ. Mỗi mục trong bản đồ bao gồm khóa-giá trị và một giá trị được ánh xạ. Hai giá trị được ánh xạ không thể chia sẻ các giá trị khóa giống nhau.
Các giá trị chính rất tốt cho việc phân loại và xác định các phần tử duy nhất. Các giá trị được ánh xạ là để lưu trữ nội dung được liên kết với khóa. Hai loại có thể khác nhau về loại, nhưng loại thành viên kết hợp chúng thông qua loại cặp kết hợp cả hai.
Trong hướng dẫn C ++ này, bạn sẽ học:
- Std :: map là gì?
- Tại sao sử dụng std :: map?
- Cú pháp:
- Các loại thành viên:
- Chức năng tích hợp sẵn
- Lặp lại các phần tử bản đồ
- Chèn dữ liệu vào std :: map:
- Tìm kiếm trong Bản đồ
- Xóa dữ liệu khỏi bản đồ
Tại sao sử dụng std :: map?
Đây là lý do sử dụng bản đồ:
- std :: map chỉ lưu trữ các khóa duy nhất theo thứ tự được sắp xếp dựa trên các tiêu chí sắp xếp đã chọn.
- Thật dễ dàng và nhanh chóng hơn để tìm kiếm các phần tử bằng cách sử dụng khóa.
- Chỉ một phần tử được gắn vào mỗi khóa.
- std :: map có thể được sử dụng như một mảng kết hợp.
- std :: map có thể thực hiện được bằng cách sử dụng cây nhị phân (cân bằng).
Cú pháp:
Để khai báo std :: map, hãy sử dụng cú pháp sau:
std::mapmap_name;
- Key_datatype biểu thị kiểu dữ liệu của các khóa bản đồ.
- Value_datatype biểu thị kiểu dữ liệu của các giá trị tương ứng với các khóa bản đồ.
- Map_name là tên của bản đồ.
Ví dụ:
mapmy_map;
Chúng tôi đã khai báo một bản đồ có tên my_map. Bản đồ sẽ có một chuỗi là kiểu dữ liệu khóa và số nguyên là kiểu dữ liệu giá trị .
Các loại thành viên:
Các hàm thành viên có thể sử dụng các kiểu thành viên sau làm tham số hoặc kiểu trả về:
- key_type: Key (Tham số đầu tiên trong mẫu)
- mapped_type: T (Tham số thứ hai trong mẫu)
- key_compare: So sánh (Tham số thứ ba trong mẫu)
- Cấp phát_type: Phân bổ (Tham số thứ tư trong mẫu)
- value_type: cặp
- value_compare: Lớp hàm lồng nhau để so sánh các phần tử
- tham chiếu: certator_type :: tham chiếu
- const_reference: phân bổ_type :: const_reference
- pointer: certator_type :: pointer
- const_pointer: certator_type :: const_pointer
- trình lặp: một trình lặp hai chiều tới value_type
- const_iterator: một trình lặp hai chiều cho kiểu_tìm giá trị const
- reverse_iterator: một trình lặp ngược
- const_reverse_iterator: một trình lặp đảo ngược hằng số
- diff_type : ptrdiff_t
- size_type: size_t
Chức năng tích hợp sẵn
std :: map đi kèm với các chức năng có sẵn. Một số trong số này bao gồm:
- begin () - Hàm này trả về trình vòng lặp đến mục đầu tiên của bản đồ.
- size () - Hàm này trả về số lượng mục trong bản đồ.
- void () - Hàm này trả về một giá trị Boolean biểu thị liệu một bản đồ có trống hay không.
- insert (pair (key, value)) - Hàm này chèn cặp key-value mới vào bản đồ.
- find (val) - Hàm này cung cấp trình lặp cho phần tử val nếu nó được tìm thấy. Nếu không, nó sẽ trả về m.end ().
- Erase (vị trí trình lặp) - Hàm này xóa mục tại vị trí được trỏ bởi trình lặp.
- xóa (const g) - Hàm này xóa khóa-giá trị g khỏi bản đồ.
- Clear () - Chức năng này xóa tất cả các mục khỏi bản đồ.
Lặp lại các phần tử bản đồ
Bạn có thể lặp lại các phần tử bản đồ. Chúng ta chỉ cần tạo một trình lặp và sử dụng nó cho việc này. Ví dụ:
Ví dụ 1:
#include#include #include
Đầu ra:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Bao gồm tệp tiêu đề iostream vào mã của chúng tôi để sử dụng các chức năng của nó.
- Bao gồm tệp tiêu đề chuỗi vào mã của chúng tôi để sử dụng các chức năng của nó.
- Bao gồm tệp tiêu đề bản đồ vào mã của chúng tôi để sử dụng các chức năng của nó.
- Bao gồm không gian tên std vào mã của chúng tôi để sử dụng các lớp của nó mà không cần gọi nó.
- Gọi hàm main (). Dấu {đánh dấu phần đầu của phần thân của hàm.
- Tạo một bản đồ có tên là Sinh viên trong đó các khóa sẽ là số nguyên và các giá trị sẽ là chuỗi.
- Chèn giá trị vào bản đồ Học sinh. Một khóa 200 và một giá trị của Alice sẽ được đưa vào bản đồ.
- Chèn giá trị vào bản đồ Học sinh. Khoá 201 và một giá trị của John sẽ được chèn vào bản đồ.
- Sử dụng hàm size () để lấy kích thước của bản đồ có tên là Sinh viên. Điều này sẽ trả về một 2.
- In một số văn bản trên bảng điều khiển.
- Sử dụng vòng lặp for để tạo một trình lặp đặt tên nó để lặp qua các phần tử của bản đồ có tên là Sinh viên.
- In các giá trị của bản đồ Học sinh trên bảng điều khiển.
- Cuối phần thân của vòng lặp for.
- Cuối phần thân của hàm main ().
Chèn dữ liệu vào std :: map
Bạn có thể nhập các mục vào std :: map bằng cách sử dụng hàm insert (). Hãy nhớ rằng các khóa std :: bản đồ phải là duy nhất.
Vì vậy, trước tiên nó kiểm tra xem mỗi khóa có hiện diện trong bản đồ hay không. Nếu nó hiện diện, mục nhập sẽ không được chèn, nhưng nó trả về trình vòng lặp cho mục nhập hiện có. Nếu nó không có mặt, mục nhập sẽ được chèn.
Hàm có các biến thể sau:
- insert (cặp) - với biến thể này, một cặp khóa-giá trị được chèn vào bản đồ.
- insert (start_itr, end_itr) - với biến thể này, các mục nhập sẽ được chèn trong phạm vi được xác định bởi start_itr và end_itr từ một bản đồ khác.
Hàm insert_or_assing () hoạt động theo cách tương tự như hàm insert (), nhưng nếu khóa đã cho đã tồn tại trong bản đồ, giá trị của nó sẽ được sửa đổi.
Ví dụ 2:
#include
Đầu ra:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Bao gồm tệp tiêu đề bản đồ vào mã của chúng tôi để sử dụng các chức năng của nó.
- Bao gồm tệp tiêu đề iostream vào mã của chúng tôi để sử dụng các chức năng của nó.
- Bao gồm không gian tên std vào mã của chúng tôi để sử dụng các lớp của nó mà không cần gọi nó.
- Gọi hàm main (). Dấu {đánh dấu phần đầu của phần thân của hàm.
- Tạo một bản đồ có tên m trong đó các khóa sẽ là số nguyên và các giá trị sẽ là số nguyên. Ba mục đã được đưa vào bản đồ.
- Chèn một mục mới vào bản đồ m. Khóa của 5 và giá trị là 6 sẽ được chèn vào bản đồ.
- Đang cố gắng thực hiện một mục nhập vào một khóa đã tồn tại. Vì khóa 1 đã tồn tại trong bản đồ, nên mục nhập sẽ không được thực hiện.
- Sử dụng hàm insert_or_assign () để chèn hoặc sửa đổi mục nhập hiện có. Vì khóa 1 đã tồn tại nên giá trị của nó sẽ được thay đổi thành 6.
- In một số văn bản trên bảng điều khiển. Ký tự "\ t" tạo ra một khoảng trắng trong khi ký tự "\ n" di chuyển con trỏ chuột đến dòng tiếp theo.
- Sử dụng vòng lặp for để tạo một trình vòng lặp có tên itr để lặp qua các phần tử của bản đồ có tên là m.
- In các giá trị của bản đồ m trên bảng điều khiển. Ký tự "\ t" tạo ra một khoảng trống ngang giữa mỗi khóa và giá trị tương ứng của nó. Ngược lại, ký tự "\ n" di chuyển con trỏ chuột đến dòng tiếp theo sau mỗi lần lặp.
- Cuối phần thân của vòng lặp for.
- Chương trình phải trả về giá trị khi hoàn thành thành công.
- Cuối phần thân của hàm main ().
Tìm kiếm trong Bản đồ
Chúng ta có thể sử dụng hàm find () để tìm kiếm các phần tử trong bản đồ bằng các phím của chúng. Nếu không tìm thấy khóa, hàm trả về std :: map :: end. Nếu không, một trình lặp của phần tử được tìm kiếm sẽ được trả về.
Ví dụ 2:
#include#include #include
Đầu ra:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Bao gồm tệp tiêu đề iostream vào mã của chúng tôi để sử dụng các chức năng của nó mà không gặp lỗi.
- Bao gồm tệp tiêu đề chuỗi vào mã của chúng tôi để sử dụng các chức năng của nó mà không gặp lỗi.
- Bao gồm tệp tiêu đề bản đồ vào mã của chúng tôi để sử dụng các chức năng của nó mà không gặp lỗi.
- Bao gồm không gian tên std vào mã của chúng tôi để sử dụng các lớp của nó mà không cần gọi nó.
- Gọi hàm main (). Dấu {đánh dấu phần bắt đầu của phần thân của hàm main ().
- Tạo một bản đồ có tên là Sinh viên có khóa sẽ là các số nguyên và các chuỗi giá trị.
- Chèn giá trị vào bản đồ Học sinh. Một khóa 200 và một giá trị của Alice sẽ được đưa vào bản đồ.
- Chèn giá trị vào bản đồ Học sinh. Khoá 201 và một giá trị của John sẽ được chèn vào bản đồ.
- Tìm giá trị được liên kết với khóa 201.
- Sử dụng câu lệnh if để kiểm tra xem giá trị của khóa có được tìm thấy hay không.
- In giá trị của khóa cùng với một số văn bản trên bảng điều khiển.
- Cuối phần nội dung của câu lệnh if.
- Cuối phần thân của hàm main ().
Xóa dữ liệu khỏi bản đồ
Chúng ta có thể sử dụng hàm xóa () để xóa một giá trị khỏi bản đồ. Chúng ta chỉ cần tạo một trình lặp trỏ đến phần tử cần xóa. Sau đó, trình lặp được chuyển cho hàm xóa ().
Ví dụ 3:
#include#include #include
Đầu ra:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Bao gồm tệp tiêu đề iostream vào mã của chúng tôi để sử dụng các chức năng của nó.
- Bao gồm tệp tiêu đề chuỗi vào mã của chúng tôi để sử dụng các chức năng của nó.
- Bao gồm tệp tiêu đề bản đồ vào mã của chúng tôi để sử dụng các chức năng của nó.
- Bao gồm không gian tên std vào mã của chúng tôi để sử dụng các lớp của nó mà không cần gọi nó.
- Gọi hàm main (). Dấu {đánh dấu phần đầu của phần nội dung của hàm main ().
- Tạo một bản đồ có tên my_map có các khóa sẽ là các chuỗi và các giá trị là số nguyên.
- Chèn các giá trị vào bản đồ my_map. Chìa khóa Bò và giá trị 1 sẽ được chèn vào bản đồ.
- Chèn các giá trị vào bản đồ my_map. Một khóa Cat và giá trị 2 sẽ được chèn vào bản đồ.
- Thêm một giá trị 3 vào bản đồ my_map với một khóa của một con sư tử.
- Tạo một trình vòng lặp để lặp lại trên bản đồ my_map đang tìm kiếm con mèo chìa khóa.
- Xóa phần tử được trỏ tới bởi trình vòng lặp.
- Sử dụng một trình lặp để lặp qua các phần tử của bản đồ my_map từ đầu đến cuối.
- In ra nội dung của bản đồ my_map trên bảng điều khiển.
- Chương trình phải trả về đầu ra sau khi hoàn thành thành công.
- Cuối phần thân của hàm main ().
Tóm lược:
- Bản đồ là một vùng chứa liên kết lưu trữ các mục ở dạng được ánh xạ.
- Mỗi mục trong bản đồ có một giá trị khóa và một giá trị được ánh xạ.
- Trong một bản đồ, hai giá trị được ánh xạ không thể chia sẻ các giá trị chính.
- Các giá trị chính giúp phân loại và xác định các phần tử duy nhất.
- Các giá trị được ánh xạ giúp lưu trữ nội dung được liên kết với khóa.
- Bản đồ C ++ lưu trữ các khóa duy nhất theo thứ tự được sắp xếp.
- Để làm việc với bản đồ C ++, chúng tôi tạo một trình vòng lặp để lặp qua các phần tử.
- Với trình lặp, chúng ta có thể thực hiện các tác vụ như tìm kiếm và xóa các mục khỏi bản đồ.