Unordered_map trong C++ là gì? Bài tập Unordered_map trong C++

Unordered_map trong C++ là gì?

Unordered_map là một cấu trúc dữ liệu của Thư viện C++ chuẩn (STL) dùng để lưu trữ các cặp giá trị (key-value). Unordered_map sử dụng cấu trúc dữ liệu hash table để lưu trữ các phần tử, do đó thời gian truy cập các phần tử là O(1).

Unordered_map có các đặc điểm sau:

  • Các phần tử trong unordered_map không được sắp xếp theo thứ tự.
  • Key của các phần tử trong unordered_map phải có thể chuyển đổi thành số nguyên hoặc chuỗi.
  • Giá trị của các phần tử trong unordered_map có thể là bất kỳ kiểu dữ liệu nào.

Dưới đây là một ví dụ về cách sử dụng unordered_map:

C++

#include <iostream>
#include <unordered_map>

using namespace std;

int main() {
  unordered_map<int, string> my_map;

  my_map[1] = "John";
  my_map[2] = "Mary";
  my_map[3] = "Peter";

  // Tìm kiếm phần tử có key là 2
  auto it = my_map.find(2);
  if (it != my_map.end()) {
    cout << it->second << endl; // Mary
  }

  return 0;
}

Trong ví dụ trên, chúng ta tạo một unordered_map lưu trữ các cặp tên và tuổi. Sau đó, chúng ta thêm ba phần tử vào unordered_map. Cuối cùng, chúng ta tìm kiếm phần tử có key là 2 và in ra giá trị của phần tử đó.

Một số phương thức thường được sử dụng trong unordered_map bao gồm:

  • begin(): Trả về iterator tới phần tử đầu tiên của unordered_map.
  • end(): Trả về iterator tới phần tử sau cùng của unordered_map.
  • find(): Trả về iterator tới phần tử có key được chỉ định. Nếu không tìm thấy phần tử nào, iterator sẽ trả về my_map.end().
  • insert(): Thêm một phần tử vào unordered_map.
  • erase(): Xóa một phần tử khỏi unordered_map.
  • empty(): Kiểm tra xem unordered_map có rỗng hay không.
  • size(): Trả về số lượng phần tử trong unordered_map.
Xem thêm:  Một căn phòng hình chữ nhật có chiều dài 8m, chiều rộng bằng 3/4 chiều dài để lát nền căn phòng đó người ta dùng loại gạch men hình vuông có cạnh 4dm, hỏi căn phòng được lát nền bằng bao nhiêu gạch men đó

Unordered_map là một cấu trúc dữ liệu hữu ích cho các ứng dụng cần truy cập nhanh chóng các phần tử theo key.

Bài tập Unordered_map trong C++

Dưới đây là một số bài tập unordered_map trong C++ mà bạn có thể thực hành:

  • Bài tập 1: Tạo một unordered_map lưu trữ các số nguyên và giá trị của chúng. Ví dụ:

C++

#include <iostream>
#include <unordered_map>

using namespace std;

int main() {
  unordered_map<int, int> my_map;

  my_map[1] = 10;
  my_map[2] = 20;
  my_map[3] = 30;

  cout << my_map[1] << endl; // 10
  cout << my_map[2] << endl; // 20
  cout << my_map[3] << endl; // 30

  return 0;
}

  • Bài tập 2: Thêm, xóa và sửa các phần tử trong unordered_map.

C++

#include <iostream>
#include <unordered_map>

using namespace std;

int main() {
  unordered_map<int, int> my_map;

  // Thêm phần tử
  my_map[1] = 10;

  // Xóa phần tử
  my_map.erase(1);

  // Sửa phần tử
  my_map[1] = 20;

  cout << my_map[1] << endl; // 20

  return 0;
}

  • Bài tập 3: Tìm kiếm phần tử trong unordered_map.

C++

#include <iostream>
#include <unordered_map>

using namespace std;

int main() {
  unordered_map<int, int> my_map;

  my_map[1] = 10;
  my_map[2] = 20;
  my_map[3] = 30;

  // Tìm kiếm phần tử có key là 2
  auto it = my_map.find(2);
  if (it != my_map.end()) {
    cout << it->second << endl; // 20
  }

  return 0;
}

  • Bài tập 4: Sắp xếp các phần tử trong unordered_map.

C++

#include <iostream>
#include <unordered_map>
#include <algorithm>

using namespace std;

int main() {
  unordered_map<int, int> my_map;

  my_map[1] = 10;
  my_map[2] = 20;
  my_map[3] = 30;

  // Sắp xếp các phần tử theo key
  for (auto it = my_map.begin(); it != my_map.end(); it++) {
    cout << it->first << " " << it->second << endl;
  }

  // Sắp xếp các phần tử theo value
  for (auto it = my_map.begin(); it != my_map.end(); it++) {
    auto it_min = min_element(it, my_map.end(), [](const pair<int, int>& p1, const pair<int, int>& p2) {
      return p1.second < p2.second;
    });
    cout << it_min->first << " " << it_min->second << endl;
  }

  return 0;
}

  • Bài tập 5: Tạo một unordered_map lưu trữ các cặp tên và tuổi. Ví dụ:
Xem thêm:  [Hỏi đáp] Nguyên nhân nào dẫn đến sự sụp đổ của chủ nghĩa xã hội ở liên xô và đông âu?

C++

#include <iostream>
#include <unordered_map>

using namespace std;

int main() {
  unordered_map<string, int> my_map;

  my_map["John"] = 20;
  my_map["Mary"] = 25;
  my_map["Peter"] = 30;

  // Tìm kiếm phần tử có key là "Mary"
  auto it = my_map.find("Mary");
  if (it != my_map.end()) {
    cout << it->first << " " << it->second << endl; // Mary 25
  }

Trả lời

Email của bạn sẽ không được hiển thị công khai.