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:  Những vòng tròn trên quả Địa Cầu vuông góc với các kinh tuyến là những đường gì ?

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:  [Trả lời] How far is it from your house to school? How do you go to school?

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.