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

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

Hướng dẫn cách thêm chèn phần tử vào multimap trong C++. Bạn sẽ học được cách dùng hàm insert và và emplace để thêm chèn phần tử vào multimap trong C++ sau bài học này.

Sự khác biệt khi thêm chèn phần tử vào multimap với các container khác

Để thêm chèn phần tử vào multimap trong C++, chúng ta sử dụng tới hàm thành viên insert() hoặc emplace(). Do khi chèn phần tử vào multimap thì vị trí chèn sẽ được tự động quyết định tùy thuộc vào bộ sắp xếp trong multimap, nên lưu ý khác với các containers khác như list hay vector thì trong multimap 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 multimap.

Và khác với map thì trong multimap cũng không tồn tại toán tử [] nên chúng ta chỉ có thể dùng 2 hàm thành viên ở trên để thêm chèn phần tử mà thôi.

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

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

Để chèn 1 phần tử vào trong multimap C++, chúng ta sử dụng hàm insert kết hợp với hàm pair() với cú pháp sau đây:

mp.insert(std::pair<k_type,x_type>(k,v));

Trong đó

  • mp là multimap 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 multimap insert sẽ trả về một trình lặp trỏ tới vị trí phần tử vừa được chèn vào.

Lại nữa, phần tử trong multimap đượ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 multimap 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 multimap
void dump(multimap<char,int>& mp)
{
for (auto x: mp) {
cout << x.first << ": " << x.second << " ";
}
cout << endl;
}


int main ()
{
/*Khởi tạo multimap*/
multimap<char,int> mp = {
{ 'a', 10 },
{ 'b', 20 },
{ 'c', 30 } };

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

//chèn phần tử bằng insert và pair
mp.insert(pair<char,int>('z',40));
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: 10 b: 20 c: 30 
a: 10 b: 20 c: 30 z: 40
a: 10 b: 20 c: 30 x: 50 z: 40

Chúng ta cũng có thể lấy vị trí đã chèn của phần tử vào multimap bằng trình lặp thu về từ hàm, rồi truy xuất nó thông qua trình lặp như sau:

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

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


int main ()
{
/*Khởi tạo multimap*/
multimap<char,int> mp = {
{ 'a', 10 },
{ 'b', 20 },
{ 'c', 30 } };

auto itr = mp.insert(make_pair('x',50));
cout << (*itr).first << " => " << (*itr).second ;

return 0;
}

Kết quả:

x => 50

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

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

Để chèn thêm 1 phần tử vào trong multimap C++, chúng ta sử dụng hàm emplace với cú pháp sau đây:

mp.emplace(k,v);

Trong đó

  • mp là multimap ban đầu
  • k,v là key và value.

Hàm multimap 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.

Lại nữa, phần tử trong multimap đượ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 multimap 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 multimap
void dump(multimap<char,int>& mp)
{
for (auto x: mp) {
cout << x.first << ":" << x.second << " ";
}
cout << endl;
}


int main ()
{
/*Khởi tạo multimap*/
multimap<char,int> mp = {
{ 'a', 10 },
{ 'b', 20 },
{ 'c', 30 } };

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

//chèn phần tử bằng emplace
mp.emplace('z',40);
dump(mp);

//chèn và lấy khóa và giá trị của phần tử vừa chèn
auto itr = mp.emplace('x',50);
cout << (*itr).first << " => " << (*itr).second ;
return 0;
}

Kết quả:

a:10 b:20 c:30 
a:10 b:20 c:30 z:40
x => 50

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

Để chèn nhiều phần tử vào trong multimap 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à multimap 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 multimap khác vào multimap 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 multimap 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 multimap
void dump(multimap<int, const char*>& mp)
{
for (auto x: mp) {
cout << x.first << ": " << x.second << " ";
}
cout << endl;
}


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

/*Khai báo multimap mp2*/
multimap<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 multimap mp2
cout <<"mp2= ";
dump(mp2);
return 0;
}

Và kết quả:

mp1= 1: a 2: b 3: c 4: d 5: e 
mp2= 1: a 2: b 3: c

Có thể thấy các phần tử từ đầu cho tới phần tử có key bằng 4 trong mp1 đã được copy và chèn vào mp2 như trên.

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

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.