Thêm chèn phần tử vào map trong C++ | Laptrinhcanban.com

HOME › >>

Thêm chèn phần tử vào map trong C++

Hướng dẫn cách thêm chèn phần tử vào 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 map trong C++ sau bài học này.

Để thêm chèn phần tử vào 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 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 map, nên lưu ý khác với các containers khác như list hay vector thì trong 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 map.

Thêm 1 phần tử vào map trong C++ bằng toán tử []

Để thêm 1 phần tử vào 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 map
  • keyvalue là khóa và giá trị của phần tử cần thêm vào map

Ví dụ:

map<char,int> foo,bar;

foo['x']=100; //()
foo['y']=200;

Lưu ý do mỗi key trong map đều là duy nhất nên nếu chúng ta thêm một phần tử mới vào 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ụ:

#include <iostream>
#include <map>
using namespace std;

//Tạo hàm xuất map
void dump(map<char,int>& mp)
{
for (auto x: mp) {
cout << x.first << ":" << x.second << " ";
}
cout << endl;
}

int main ()
{
map<char,int> mymap;

mymap['x']=100;
mymap['y']=200;
mymap['z']=300;

dump(mymap); // x:100 y:200 z:300

mymap['z']=888;
dump(mymap); // x:100 y:200 z:888
}

Chèn 1 phần tử vào map trong C++ bằng hàm insert

Hàm insert là một hàm thành viên trong class std:map, có tác dụng chèn một hoặc nhiều phần tử vào map cũng như tăng độ dài tương ứng của nó.

Để chèn 1 phần tử vào trong 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à map ban đầu
  • pair<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 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 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 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 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 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 map, thì bản thân map ban đầu sẽ được trả về.

Lại nữa, phần tử trong 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 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ể:

#include <iostream>
#include <map>
using namespace std;

//Tạo hàm xuất map
void dump(map<char,int>& mp)
{
for (auto x: mp) {
cout << x.first << ":" << x.second << " ";
}
cout << endl;
}


int main ()
{
/*Khai báo và gán giá trị cho foo và bar*/
map<char,int> mp;

mp['a']=100;
mp['b']=200;

// duyệt map ban đầu
dump(mp);

//chèn phần tử với key chưa tồn tại trong map
mp.insert(pair<char,int>('c',300));
dump(mp);

//chèn phần tử với key đã tồn tại trong map
mp.insert(pair<char,int>('a',3));
dump(mp);

//chèn phần tử bằng insert và make_pair
mp.insert(make_pair('x',50));
dump(mp);

return 0;
}

Kết quả:

a:100 b:200 
a:100 b:200 c:300
a:100 b:200 c:300 // Do key đã tồn tại nên sẽ không được chèn
a:100 b:200 c:300 x:50

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:

#include <iostream>
#include <map>
using namespace std;

int main ()
{
/*Khai báo và gán giá trị cho foo và bar*/
map<char,int> mp;

mp['a']=100;
mp['b']=200;

//chèn phần tử với key chưa tồn tại trong map
auto r = mp.insert(pair<char,int>('z',300));
cout << r.second << "\n"; // Trả về 1 do được chèn

//chèn phần tử với key tồn tại trong map,
r = mp.insert(pair<char,int>('a',3));
cout << r.second << "\n"; // Trả về 0 do không được chèn

return 0;
}

Thêm chèn 1 phần tử vào map trong C++ bằng hàm emplace

Hàm emplace là một hàm thành viên trong class std:map, có tác dụng chèn một hoặc nhiều phần tử vào 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 map.

Để chèn thêm 1 phần tử vào trong 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à map ban đầu
  • k,v là key và value.

Hàm 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 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 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 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 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ể:

#include <iostream>
#include <map>
using namespace std;

//Tạo hàm xuất map
void dump(map<char,int>& mp)
{
for (auto x: mp) {
cout << x.first << ":" << x.second << " ";
}
cout << endl;
}

int main ()
{
std::map<char,int> mymap;

mymap.emplace('x',100);
mymap.emplace('y',200);
mymap.emplace('z',100);

dump(mymap);
return 0;
}

Kết quả:

x:100 y:200 z:100

Chèn nhiều phần tử vào map trong C++ bằng hàm insert

Để chèn nhiều phần tử vào trong 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à map ban đầu
  • iterator_firstiterator_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 map khác vào 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 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ể:

#include <iostream>
#include <map>
using namespace std;

//Tạo hàm xuất map
void dump(map<int, const char*>& mp)
{
for (auto x: mp) {
cout << x.first << ": " << x.second << " ";
}
cout << endl;
}


int main ()
{
/* Khởi tạo map mp1*/
map<int, const char*> mp1 =
{
{1, "a"},
{2, "b"},
{3, "c"},
{4, "d"},
{5, "e"},
};
// duyệt map mp1
dump(mp1);

/*Khai báo map mp2*/
map<int, const char*> mp2;

/*Chèn các phần tử từ đầu tới phần tử có key bằng 4
từ mp1 vào mp2*/
mp2.insert(mp1.begin(),mp1.find(4));


// duyệt map mp2
dump(mp2);
return 0;
}

Và kết quả:

1: a 2: b 3: c 4: d 5: e 
1: a 2: b 3: c

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

https://laptrinhcanban.com/cpp/lap-trinh-cpp-co-ban/map-trong-cpp/them-chen-map-trong-cpp/

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME  › >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.