Tìm Hiểu Về Kiểu Dữ Liệu Pair Trong C++
1. Giới Thiệu Kiểu Dữ Liệu Pair
Pair là một kiểu dữ liệu cấu trúc được định nghĩa trong thư viện chuẩn của C++. Đây không phải là kiểu dữ liệu cơ bản như int
, float
, hay char
, mà là kiểu dữ liệu phức hợp dùng để lưu trữ hai giá trị, có thể thuộc hai kiểu dữ liệu khác nhau.
Pair giúp chúng ta lưu trữ hai đối tượng không đồng nhất như một đơn vị. Nó rất hữu ích khi chúng ta cần lưu trữ các bộ dữ liệu cùng nhau.
1.1 Cấu Trúc của Pair
- Phần tử đầu tiên được gọi là first và phần tử thứ hai là second. Thứ tự này là cố định (first, second).
- Để truy cập các phần tử, bạn chỉ cần sử dụng tên biến, theo sau là toán tử dấu chấm, và sau đó là từ khóa
first
hoặcsecond
.
1.2 Ví Dụ
p.first
p.second
2. Khai Báo Kiểu Pair
Có nhiều cách để khai báo một pair trong C++:
2.1 Cách 1: Khai báo với giá trị mặc định
cpp
pair<Kiểu dữ liệu_first, Kiểu dữ liệu_second> p1;
2.2 Cách 2: Khai báo với giá trị cụ thể
cpp
pair<Kiểu dữ liệu_first, Kiểu dữ liệu_second> p2 = {giá trị kiểu 1, giá trị kiểu 2};
2.3 Cách 3: Khai báo và khởi tạo giá trị
cpp
pair<Kiểu dữ liệu_first, Kiểu dữ liệu_second> p3(giá trị kiểu 1, giá trị kiểu 2);
2.4 Cách 4: Khai báo bằng hàm make_pair
cpp
pair<Kiểu dữ liệu_first, Kiểu dữ liệu_second> p4 = make_pair(giá trị kiểu 1, giá trị kiểu 2);
2.5 Ví Dụ Đầy Đủ
cpp
#include <iostream>
using namespace std;
int main() {
pair<int, int> p1;
pair<int, string> p2 = {1, "Nguyen Van An"};
pair<int, float> p3(1, 8.5);
pair<float, float> p4 = make_pair(8.3, 7.5);
return 0;
}
3. Sử Dụng Pair Trong Chương Trình
3.1 Truy Cập Giá Trị Của Pair
cpp
#include <iostream>
using namespace std;
int main() {
pair<int, int> p1;
pair<int, string> p2 = {1, "Nguyen Van An"};
pair<int, float> p3(1, 8.5);
pair<float, float> p4 = make_pair(8.3, 7.5);
cout << p1.first << " " << p1.second << endl;
cout << p2.first << " " << p2.second << endl;
cout << p3.first << " " << p3.second << endl;
cout << p4.first << " " << p4.second << endl;
return 0;
}
3.2 Gán và Nhập Giá Trị Cho Các Phần Tử
3.2.1 Gán Trực Tiếp và Nhập từ Bàn Phím
cpp
#include <iostream>
using namespace std;
int main() {
pair<int, string> p2;
p2.first = 2024;
p2.second = "Chuc mung nam moi";
cout << p2.first << " " << p2.second << endl;
cout << "Nhap vao mot so tu nhien: ";
cin >> p2.first;
cout << p2.first << " " << p2.second << endl;
string s;
cout << "Nhap vao mot xau ki tu: ";
getline(cin, s);
p2.second = s;
cout << p2.first << " " << p2.second << endl;
return 0;
}
Lưu ý: Để tránh việc nhầm lẫn với ký tự enter khi dùng getline()
, bạn có thể sử dụng cin.ignore()
để loại bỏ ký tự thừa này.
3.2.2 Nhập và Xuất Từ Tệp
cpp
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin;
ofstream fout;
fin.open("DATA.INP", ios::in);
fout.open("DATA.OUT", ios::out);
if(fin.fail()) {
fout << "Loi doc tep";
} else {
pair<int, string> p2;
fin >> p2.first;
fin.ignore();
getline(fin, p2.second);
fout << p2.first << " " << p2.second << endl;
}
fin.close();
fout.close();
return 0;
}
3.3 Ví Dụ Thực Tế Với Phân Số
cpp
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
pair<int, int> getRutgon(pair<int, int> p) {
int ucln = abs(__gcd(p.first, p.second));
p.first = p.first / ucln;
p.second = p.second / ucln;
return p;
}
int main() {
ifstream fin;
ofstream fout;
fin.open("DATA.INP", ios::in);
fout.open("DATA.OUT", ios::out);
if(fin.fail()) {
fout << "Loi doc tep";
} else {
pair<int, int> p2;
fin >> p2.first;
fin.ignore();
fin >> p2.second;
pair<int, int> p = getRutgon(p2);
fout << p.first << "/" << p.second << endl;
}
fin.close();
fout.close();
return 0;
}
source: viblo