Hàm Unordered_Map::Find() trong C++

Ham Unordered Map Find Trong C



C++ nổi tiếng với thư viện mẫu tiêu chuẩn (STL) mạnh mẽ và linh hoạt, cung cấp cho các nhà phát triển một bộ mở rộng các bộ chứa, trình vòng lặp, thuật toán và hàm sẵn sàng sử dụng, hiệu quả cao. Trong số này, “unordered_map” nổi bật với tư cách là nhân tố chính trong việc lưu trữ khóa-giá trị hiệu quả và truy cập tốc độ cao, khiến nó trở thành lựa chọn tuyệt vời cho các ứng dụng mà việc truy xuất nhanh là điều tối quan trọng. Trọng tâm của “unordered_map” này, hàm unordered_map::find() là một công cụ quan trọng. Cấu trúc dữ liệu này được tối ưu hóa để truy cập tốc độ cao và lưu trữ khóa-giá trị. Bài viết này cung cấp một cái nhìn toàn diện về hàm unordered_map::find() bằng cách trình bày cú pháp và tham số của nó với sự trợ giúp của các ví dụ minh họa.

Tìm hiểu về Unordered_Map::Find()

Hàm unordered_map::find() được thiết kế để định vị một phần tử được liên kết với một khóa được chỉ định trong “unordered_map”. Khai báo của nó thay đổi dựa trên việc đối tượng có đủ điều kiện không đổi hay không, mang lại sự linh hoạt trong cách sử dụng.

vòng lặp tìm ( hằng số loại chính & k ) ;

Điều này được sử dụng khi “unordered_map” không đủ tiêu chuẩn cố định. Mã này trả về một trình vòng lặp trỏ đến phần tử được tìm thấy.







const_iterator tìm ( hằng số loại chính & k ) hằng số ;

Phiên bản này có thể áp dụng khi “unordered_map” đủ điều kiện không đổi. Nó trả về một trình lặp không đổi có hành vi tương tự như phiên bản không cố định.



Thông số:



Nó nhận vào một tham số duy nhất, “k”, là khóa được tìm kiếm trong “unordered_map”.





Giá trị trả về:

Giá trị trả về phụ thuộc vào chất lượng của đối tượng “unordered_map”.

Phương thức trả về một trình vòng lặp không cố định nếu đối tượng không liên tục đủ điều kiện.



Nếu đối tượng đủ điều kiện không đổi, phương thức sẽ trả về một trình vòng lặp không đổi.

Độ phức tạp về thời gian:

Độ phức tạp về thời gian của std::unordered_map::find() là rất quan trọng để hiểu được hiệu quả của nó:

Trong trường hợp trung bình, độ phức tạp về thời gian là không đổi (O(1)), khiến nó có hiệu quả cao đối với các trường hợp sử dụng thông thường.

Trong trường hợp xấu nhất, độ phức tạp thời gian trở thành tuyến tính (O(n)). Tuy nhiên, kịch bản này rất hiếm trong thực tế.

Ví dụ 1:

Hãy cùng khám phá một ví dụ thực tế để minh họa cách sử dụng và lợi ích của unordered_map::find(). Trong ví dụ này, một “unordered_map” được tạo với các ký tự là khóa và các số nguyên tương ứng làm giá trị. Hàm find() định vị phần tử được liên kết với khóa “p”. Trình lặp “ittr” được liên kết với phần tử tìm thấy và dữ liệu của nó được in ra bảng điều khiển. Xem đoạn mã sau:

#include

#include

sử dụng không gian tên std ;

int chủ yếu ( trống rỗng ) {

không có thứ tự_map < ký tự , int > không có gì đặc biệt = {

{ 'TRONG' , 9 } ,

{ 'Một' , 6 } ,

{ 'P' , số 8 } ,

{ 'tôi' , 3 } ,

{ 'S' , 4 } } ;

tự động ittr = unomp. tìm thấy ( 'P' ) ;

cout << 'Trình vòng lặp' ' << ittr-> đầu tiên << ' ' trỏ đến =' << ittr -> thứ hai << kết thúc ;

trở lại 0 ; }

Hãy phân tích mã để hiểu rõ hơn và rõ hơn về nó:

#include

#include

Bao gồm các tệp tiêu đề cần thiết: cho các hoạt động đầu vào/đầu ra và để sử dụng vùng chứa “unordered_map”.

sử dụng không gian tên std ;

Không gian tên “std” đơn giản hóa mã. Nó cho phép bạn sử dụng các phần tử từ thư viện C++ tiêu chuẩn mà không cần thêm tiền tố “std::” vào chúng.

không có thứ tự_map < ký tự , int > không có gì đặc biệt = { { 'TRONG' , 9 } , { 'Một' , 6 } , { 'P' , số 8 } , { 'tôi' , 3 } , { 'S' , 4 } } ;

Một “unordered_map” có tên “um” được tạo với các ký tự ('w', 'a', 'p', 'm', 's') làm khóa và các số nguyên tương ứng (9, 6, 8, 3, 4 ) dưới dạng các giá trị.

tự động ittr = unomp. tìm thấy ( 'P' ) ;

Hàm find() được sử dụng để tìm kiếm phần tử có khóa “p” trong “unordered_map” là “unomp”. Trình lặp “ittr” trỏ đến phần tử được xác định.

cout << 'Trình vòng lặp' ' << ittr-> đầu tiên << ' ' trỏ đến =' << ittr -> thứ hai << kết thúc ;

Nội dung được trỏ tới bởi iterator sẽ được in ra bàn điều khiển. Nó in khóa (“p”) và giá trị liên quan (8) trong trường hợp này.

trở lại 0 ;

Chương trình kết thúc, trả về 0 để biểu thị việc thực hiện thành công.

Đầu ra của mã được đưa ra như sau để bạn tham khảo:

Mã này là một ví dụ đơn giản về việc sử dụng unordered_map::find() để tìm kiếm và truy cập các phần tử trong một “unordered_map” một cách hiệu quả. Trình vòng lặp cung cấp một cách thuận tiện để truy cập cả khóa và giá trị liên quan của phần tử tìm thấy.

Ví dụ 2:

Đây là một ví dụ đơn giản khác về hàm unordered_map::find(). Mã này minh họa cách sử dụng “unordered_map” để lưu trữ các giá trị Boolean được liên kết với các khóa số nguyên và sau đó sử dụng hàm find() để kiểm tra sự tồn tại của các khóa cụ thể. Chúng ta hãy xem đoạn mã sau và sau đó hiểu cách nó hoạt động:

#include

sử dụng không gian tên std ;

int chủ yếu ( ) {

không có thứ tự_map < int , bool > không có gì đặc biệt ;

không có gì đặc biệt [ 2 ] = ĐÚNG VẬY ;

không có gì đặc biệt [ 67 ] = SAI ;

không có gì đặc biệt [ Bốn năm ] = ĐÚNG VẬY ;

không có gì đặc biệt [ 98 ] = SAI ;

nếu như ( unomp. tìm thấy ( 67 ) == unomp. kết thúc ( ) )

cout << 'Không tìm thấy phần tử' << kết thúc ;

khác

cout << 'Đã tìm thấy phần tử' << kết thúc ;

nếu như ( unomp. tìm thấy ( 42 ) == unomp. kết thúc ( ) )

cout << 'Không tìm thấy phần tử' << kết thúc ;

khác

cout << 'Đã tìm thấy phần tử' << kết thúc ;

trở lại 0 ;

}

Dưới đây là mô tả chi tiết về mã:

#include

Dòng này bao gồm một tệp tiêu đề bao gồm các thư viện C++ tiêu chuẩn nhất thường được sử dụng trong lập trình cạnh tranh. Tuy nhiên, trong quá trình phát triển C++ thông thường, bạn nên đưa vào các tiêu đề cụ thể.

không có thứ tự_map < int , bool > không có gì đặc biệt ;

Một “unordered_map” có tên “unomp” được tạo bằng các khóa số nguyên và giá trị Boolean.

không có gì đặc biệt [ 2 ] = ĐÚNG VẬY ;

không có gì đặc biệt [ 67 ] = SAI ;

không có gì đặc biệt [ Bốn năm ] = ĐÚNG VẬY ;

không có gì đặc biệt [ 98 ] = SAI ;

Các cặp khóa-giá trị được chèn vào “unordered_map”. Mỗi khóa (số nguyên) được liên kết với một giá trị Boolean.

nếu như ( unomp. tìm thấy ( 67 ) == unomp. kết thúc ( ) )

cout << 'Không tìm thấy phần tử' << kết thúc ;

khác

cout << 'Đã tìm thấy phần tử' << kết thúc ;

Hàm find() được sử dụng trong điều kiện if-else để tìm kiếm các khóa cụ thể (67 và 42) trong “unordered_map”. Nếu tìm thấy khóa, “Đã tìm thấy phần tử” sẽ được in. Nếu không, “Không tìm thấy phần tử” sẽ được in. Xem đầu ra sau:

Mã này trình bày cách sử dụng cơ bản của “unordered_map” và hàm find() để xác định sự hiện diện hay vắng mặt của các khóa cụ thể trên bản đồ.

Ví dụ 3:

Chúng ta hãy khám phá một ví dụ khác minh họa việc tìm kiếm giá trị bằng cách cung cấp đầu vào trong thời gian chạy. Chương trình đơn giản này sử dụng “unordered_map” để lưu trữ tên (dưới dạng khóa) và các giá trị số liên quan (trong trường hợp này là biểu thị một số thuộc tính). Sau đó, nó sẽ nhắc người dùng nhập tên, tìm kiếm tên đó trên bản đồ bằng hàm find() và in giá trị liên quan nếu tìm thấy tên đó. Mã được đưa ra sau đây để bạn tham khảo:

#include

#include

#include

sử dụng không gian tên std ;

int chủ yếu ( ) {

tiêu chuẩn :: không có thứ tự_map < tiêu chuẩn :: sợi dây , gấp đôi > không có gì đặc biệt = {

{ 'Anh Hùng' , 23 } ,

{ 'Người khác' , 7.4 } ,

{ 'Kalsoom' , 1.2 } } ;

chuỗi ai ;

cout << 'Bạn đang tìm ai vậy? ' ;

theo hàng ( Ăn , Ai ) ;

không có thứ tự_map < sợi dây , gấp đôi >:: const_iterator tìm = unomp. tìm thấy ( Ai ) ;

nếu như ( tìm == unomp. kết thúc ( ) )

cout << 'không tìm thấy' ;

khác

cout << kết thúc << tìm -> Đầu tiên << ' là ' << tìm -> thứ hai << kết thúc ;

trở lại 0 ;

}

Sau đây là bảng phân tích mã để bạn hiểu:

không có thứ tự_map < sợi dây , gấp đôi > không có gì đặc biệt = { } ;

Một “unordered_map” có tên “unomp” được tạo bằng các khóa chuỗi (tên) và giá trị kép.

chuỗi ai ;

Người dùng được nhắc nhập tên trên màn hình và thông tin đầu vào được lưu trong biến chuỗi “who”.

không có thứ tự_map < sợi dây , gấp đôi >:: const_iterator tìm = unomp. tìm thấy ( Ai ) ;

Hàm find() được sử dụng để tìm kiếm tên đã nhập trong “unordered_map”. Kết quả được lưu trữ trong trình vòng lặp “fnd”.

nếu như ( tìm == unomp. kết thúc ( ) )

cout << 'không tìm thấy' ;

khác

cout << kết thúc << tìm -> Đầu tiên << ' là ' << tìm -> thứ hai << kết thúc ;

Nếu trình vòng lặp “fnd” đạt đến cuối “unordered_map” (end()), điều đó có nghĩa là không tìm thấy tên và “không tìm thấy” được in. Nếu không, tên và giá trị liên quan của nó sẽ được in. Đây là đầu ra của mã:

Mã này về cơ bản hoạt động như một công cụ tra cứu tên đơn giản bằng cách sử dụng “unordered_map”. Nó lấy thông tin đầu vào của người dùng, tìm kiếm tên trên bản đồ và cung cấp giá trị liên quan nếu tìm thấy tên đó.

Phần kết luận

Hàm unordered_map::find() trong C++ cung cấp một cơ chế mạnh mẽ để định vị hiệu quả các phần tử trong vùng chứa “unordered_map”. Độ phức tạp về thời gian trung bình không đổi khiến nó trở thành lựa chọn ưu tiên cho các hoạt động tìm kiếm trong các tình huống mà các cặp khóa-giá trị phải được truy cập nhanh chóng. Các ví dụ được cung cấp thể hiện cách sử dụng thực tế của nó, nhấn mạnh tính đơn giản và hiệu quả của nó. Tóm lại, việc thành thạo hàm unordered_map::find() sẽ nâng cao khả năng của lập trình viên C++ trong việc khai thác toàn bộ tiềm năng của vùng chứa “unordered_map”, góp phần tạo ra các ứng dụng được tối ưu hóa và hiệu suất cao.