Sao chép và hoán đổi multimap trong C++ (swap) | Laptrinhcanban.com

HOME › >>

Sao chép và hoán đổi multimap trong C++ (swap)

Hướng dẫn cách sao chép và hoán đổi multimap trong C++ Bạn sẽ học được cách sao chép một multimap vào một multimap khác, cũng như cách hoán đổi 2 multimap cho nhau trong C++ sau bài học này.

Sao chép multimap trong C++

multimap trong C++ thuộc kiểu dữ liệu đối tượng, do vậy khác với các kiểu dữ liệu nguyên thủy, chúng ta không thể sử dụng toán tử bằng = để gán và sao chép một multimap vào một multimap mới.

Thay vào đó, chúng ta sẽ sử dụng cách copy constructor trong multimap với cú pháp như sau:

std::multimap<k_type, v_type> mp_des( mp_src );

Trong đó type là kiểu dữ liệu, st_src là multimap nguồn để copy và st_dest là multimap đích dùng để dán kết quả sao chép.

Ví dụ cụ thể:

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

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

int main()
{
multimap<string,int> mp_src = {
{ "alpha", 10 },
{ "beta", 20 },
{ "gamma", 30 } };

cout << "Orginary multimap" << endl;
dump (mp_src);

/*Sao chép multimap*/
multimap<string,int> mp_des(mp_src);

cout << "Copy multimap" << endl;
dump (mp_des);
return 0;
}

Kết quả:

Orginary multimap
alpha: 10 beta: 20 gamma: 30
Copy multimap
alpha: 10 beta: 20 gamma: 30

Hoán đổi 2 multimap trong C++

multimap swap trong C++ là một hàm thành viên trong class std:multimap, có tác dụng hoán đổi 2 multimap trong C++.

Hàm swap sẽ hoán đổi toàn bộ nội dung của 2 multimap đã cho cho nhau và làm thay đổi nội dung cũng như độ dài của chúng.

Cú pháp hàm multimap swap để hoán đổi 2 multimap trong C++ như sau:

st1.swap(st2);

Trong đó st1st2 là 2 multimap cần hoán đổi nội dung cho nhau.

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 các multimap là foo và bar*/
multimap<char,int> foo = {
{ 'a', 10 },
{ 'b', 20 },
{ 'c', 30 } };

multimap<char,int> bar = {
{ 'x', 11 },
{ 'y', 21 } };

cout << "Before swap" << endl;
dump(foo);
dump(bar);

/*Hoán đổi for cho bar*/
foo.swap(bar);

cout << "After swap" << endl;
dump(foo);
dump(bar);
}

Kết quả:

Before swap
a: 10 b: 20 c: 30
x: 11 y: 21
After swap
x: 11 y: 21
a: 10 b: 20 c: 30

Ngoài cách dùng hàm multimap swap, chúng ta cũng có thể dùng function template là std::swap để tiến hành hoán đổi 2 multimap với nhau, cũng như là để hoán đổi các đối tượng khác như multimap, vector trong C++.

Lưu ý chúng ta cần phải thêm header file utility vào trong chương trình để có thể sử dụng được function template này

Ví dụ, chúng ta dùng std::swap để hoán đổi 2 multimap trong C++ như sau:

#include <iostream>
#include <map>
#include <utility>
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 các multimap là foo và bar*/
multimap<char,int> foo = {
{ 'a', 10 },
{ 'b', 20 },
{ 'c', 30 } };

multimap<char,int> bar = {
{ 'x', 11 },
{ 'y', 21 }};

cout << "Before swap" << endl;
dump(foo);
dump(bar);

/*Hoán đổi for cho bar*/
swap(foo,bar);

cout << "After swap" << endl;
dump(foo);
dump(bar);
}

Và chúng ta thu về kết quả hoán đổi tương tự:

Before swap
a: 10 b: 20 c: 30
x: 11 y: 21
After swap
x: 11 y: 21
a: 10 b: 20 c: 30

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về cách sao chép và hoán đổi 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.

URL Link

https://laptrinhcanban.com/cpp/lap-trinh-cpp-co-ban/multimap-trong-cpp/sao-chep-va-hoan-doi-multimap-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.