0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Hướng Dẫn Sử Dụng Kiểu Dữ Liệu Pair Trong C++

Đăng vào 3 tuần trước

• 4 phút đọc

Chủ đề:

C/Cpp

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ặc second.

1.2 Ví Dụ

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

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào