Hướng dẫn cách thêm chèn phần tử vào unordered_map trong C++. Bạn sẽ học được cách dùng toán tử [] cũng hàm insert và hàm emplace để chèn thêm phần tử vào unordered_map trong C++ sau bài học này.
Để thêm chèn phần tử vào unordered_map trong C++, chúng ta sử dụng tới toán tử [] hoặc 2 hàm thành viên là insert() và emplace(). Do khi chèn phần tử vào unordered_map thì vị trí chèn sẽ được tự động quyết định tùy thuộc vào bộ sắp xếp trong unordered_map, nên lưu ý khác với các containers khác như list hay vector thì trong unordered_map không tồn tại các hàm push_back() hay push_front() để thêm phần tử vào đầu hay cuối unordered_map.
Thêm 1 phần tử vào unordered_map trong C++ bằng toán tử []
Để thêm 1 phần tử vào unordered_map trong C++, chúng ta sử dụng toán tử []
với cú pháp sau đây:
mp[key] = value;
Trong đó
mp
là tên biến unordered_mapkey
vàvalue
là khóa và giá trị của phần tử cần thêm vào unordered_map
Ví dụ:
unordered_map<char,int> foo,bar; |
Lưu ý do mỗi key trong unordered_map đều là duy nhất nên nếu chúng ta thêm một phần tử mới vào unordered_map nhưng lại có key trùng với một phần tử đã tồn tại trước đó, thì giá trị của phần tử mới này sẽ được dùng để ghi đè lên phần tử trước đó.
Ví dụ:
|
Chèn 1 phần tử vào unordered_map trong C++ bằng hàm insert
Hàm insert là một hàm thành viên trong class std:unordered_map, có tác dụng chèn một hoặc nhiều phần tử vào unordered_map cũng như tăng độ dài tương ứng của nó.
Để chèn 1 phần tử vào trong unordered_map C++, chúng ta sử dụng hàm insert với cú pháp sau đây:
mp.insert(std::pair<k_type,x_type>(k,v));
Trong đó
mp
là unordered_map ban đầupair<k_type,x_type>(k,v)
sử dụng để chỉ định key và value của phần tử cần thêm, trong đók_type,x_type
là kiểu vàk,v
là key và value.
Trong trường hợp không rõ kiểu, hoặc muốn rút bỏ chỉ định kiểu của key và value, chúng ta có thể dùng hàm make_pair() để thay thế cho pair() trong hàm insert, với cú pháp sau đây:
mp.insert(std::make_pair(k,v));
Hàm unordered_map insert sẽ trả về một cặp kết quả pair<iterator, bool>
với iterator
là trình lặp trỏ đến unordered_map kết quả, và bool
là việc có thực hiện việc chèn hay không, dưới dạng 0 hoặc 1.
Bởi vì các phần tử trong một unordered_map là duy nhất, nên thao tác chèn sẽ kiểm tra xem mỗi phần tử được chèn đã tồn tại trong unordered_map hay chưa. Nếu chưa tồn tại thì phần tử đó sẽ được chèn và ngược lại nếu đã tồn tại thì không được chèn.
Đây là điểm khác biệt so với cách dùng toán tử [], vì khi một key đã tồn tại trong unordered_map, nếu chúng ta dùng toán tử [] thì giá trị mới sẽ được ghi đè, còn nếu dùng hàm insert thì việc chèn sẽ thất bại.
Trong trường hợp tất cả các phần tử chèn vào vốn đã tồn tại từ trước trong unordered_map, thì bản thân unordered_map ban đầu sẽ được trả về.
Lại nữa, phần tử trong unordered_map được sắp xếp theo thứ tự cụ thể trước khi được lưu, nên các phần tử cần chèn thêm vào unordered_map sẽ được tự động quyết định vị trí dựa trên bộ sắp xếp, và chúng ta sẽ không quyết định được vị trí cần chèn của phần tử.
Ví dụ cụ thể:
|
Kết quả:
b:200 a:100 |
Chúng ta cũng có thể kiểm tra việc chèn phần tử đã thực hiện hay chưa bằng phương thức first() hoặc second() từ kết quả trả về của hàm như sau:
|
Thêm chèn 1 phần tử vào unordered_map trong C++ bằng hàm emplace
Hàm emplace là một hàm thành viên trong class std:unordered_map, có tác dụng chèn một hoặc nhiều phần tử vào unordered_map thông qua hàm tạo của kiểu dữ liệu, cũng như tăng độ dài tương ứng của unordered_map.
Để chèn thêm 1 phần tử vào trong unordered_map C++, chúng ta sử dụng hàm emplace với cú pháp sau đây:
mp.emplace(k,v);
Trong đó
mp
là unordered_map ban đầuk,v
là key và value.
Hàm unordered_map emplace sẽ thực hiện việc chèn phần tử nếu key của nó chưa tồn tại trong unordered_map. Ngược lại nếu key đó đã tòn tại, việc chèn thất bại và false sẽ được trả về.
Và Hàm unordered_map emplace sẽ trả về một trình lặp trỏ tới vị trí phần tử vừa được chèn vào, nếu việc chèn thành công.
Lại nữa, phần tử trong unordered_map được lưu vào dựa theo giá trị hash của các khóa, nên các phần tử cần chèn thêm vào unordered_map sẽ được tự động quyết định vị trí dựa trên giá trị hash ở trên bảng hash, và chúng ta sẽ không quyết định được vị trí cần chèn của phần tử.
Ví dụ cụ thể:
|
Kết quả:
z:100 y:200 x:100 |
Chèn nhiều phần tử vào unordered_map trong C++ bằng hàm insert
Để chèn nhiều phần tử vào trong unordered_map C++, chúng ta sử dụng hàm insert với cú pháp sau đây:
mp.insert(iterator_first, iterator_last);
Trong đó
mp
là unordered_map ban đầuiterator_first
vàiterator_last
là các trình lặp xác định phạm vi chứa các phần tử cần chèn ở trong một unordered_map khác vào unordered_map ban đầu.
Lưu ý ở đây, các phần tử cần chèn được lấy ra từ một phạm vi trong một unordered_map khác, và phạm vi này được chỉ định thông qua 2 trình lặp như trên.
Ví dụ cụ thể:
|
Và kết quả:
5: e 4: d 3: c 2: b 1: a |
Tổng kết
Trên đây Kiyoshi đã hướng dẫn bạn về cách thêm chèn chèn phần tử vào unordered_map trong C++ rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.
Và hãy cùng tìm hiểu những kiến thức sâu hơn về C++ trong các bài học tiếp theo.
URL Link
HOME › lập trình c++ cơ bản dành cho người mới học lập trình>>26. unordered_map trong c++