Bài 12: Map - Bài tập cơ bản - Sử dụng thư viện chuẩn STL cho C/C++

Đăng bởi: Admin | Lượt xem: 6677 | Chuyên mục: C/C++


Các phương thức thường dùng trong map

1 . Constructor :

Cũng giống với những lớp vector, list đều có: 
  • default constructor
  • ranger constructor
  • copy constructor.
Các hàm thành viên này hoạt động hoàn toàn giống với lớp vector, list.
Ví dụ :
// default constructor
map<char, int> character0;

character0['a'] = 97;
character0['b'] = 98;
character0['c'] = 99;
character0['d'] = 100;

// range constructor
map<char, int> character1(character0.begin(), character0.end());

// copy constructor
map<char, int> character2(character1);
Ngoài ra còn có operator= cho phép các lớp map có thể sao chép nội dung cấu trúc dữ liệu với nhau.
map<int, char*> map0, map1;
map0[0] = "a";
map0[1] = "b";

map1 = map0;

2 . Duyệt map :

Lớp map quản lý value bằng key, nếu trường hợp quên map thì làm sao có thể truy xuất để lấy dữ liệu value. Để giải quyết vấn đề trên trong lớp map định nghĩa thao tác iterators cho phép truy xuất đến phần tử trong map để lấy dữ liệu value key cần thiết. Có các iterators đã được cung cấp như: begin(), end(), rbegin(), rend(), ... chúng hoạt động như nhau nhưng chỉ khác phần tử truy cập ở vị trí nào trong lớp map.
Ví dụ :
map<int, char*> texes;
texts[0] = "ab";
texts[1] = "bc";
texts[0] = "cd";

map<int, char*>::iterator i;

for (i = texts.begin(); i != texts.end(); i++)
	cout << *i << endl;

// output (0, "cd"), (1, "bc")
Kết quả tại sao không phải là: (0, "ab") (1, "bc") hay (0, "ab") (1, "bc") (0, "cd"), ... đó là do trong lớp map quy định key chỉ được tồn tại duy nhất (không được trùng), vì vậy khi khai báo ở dòng texts[0] = "cd"; sẽ làm thay đổi dữ liệu của texts[0] từ "ab" thành "cd".

size() cho phép lấy kích thước của map.
Ví dụ:
map<int, char*> mymap, copymymap;
mymap[0] = "a";
mymap[1] = "b";
mymap[0] = "c";

cout << mymap.size();

3. Kiểm tra map có rỗng hay không?

empty() cho phép ta kiểm tra map có rỗng hay không?
Ví dụ:
map<int, char*> mymap, copymymap;
mymap[0] = "a";
mymap[1] = "b";
mymap[0] = "c";

if (copymymap.empty()) cout << "copymymap is empty";

4. Truy xuất theo chỉ số

[index] hay at(index) cho phép truy xuất trực tiếp đến key của từng phần tử.
map<int, char*> mymap, copymymap;
mymap[0] = "a";
mymap[1] = "b";

cout << mymap[1] << " " << mymap.at(0);

5. Thêm dữ liệu vào map

insert() cho phép chèn thêm một đối tượng.
Ví dụ:
map<int, char*> mymap, copymymap;
mymap[0] = "a";
mymap[1] = "b";
mymap[5] = "c";

// chèn vào copymymap cặp đối tượng (10, "c")	
copymymap.insert(pair<int, char*>(10, "c"));
// chèn (-1, "d") vào copymymap từ vị trí bắt đầu của copymymap
copymymap.insert(copymymap.begin(), pair<int, char*>(-1, "d"));
// chèn mymap vào copymymap
copymymap.insert(mymap.begin(), mymap.end());
// => copymymap = {(-1,"d"),(0,"a"),(1,"b"),(5,"c"),(10,"c")}
Lưu ý việc chèn ở vị trí nào thật ra là vô nghĩa, vì vị trí của nó phụ thuộc vào key trong cặp đối tượng "key/ value", trong ví dụ trên thì "key" là kiểu số nguyên vì vậy vị trí của các cặp đối tượng key/value sẽ được xác định theo các key sắp xếp tăng dần.

6. Tìm kiếm phần tử

find() cho phép tìm kiếm theo key của cặp giá trị key/value
Ví dụ:
map<int, char*> mymap;
mymap[0] = "a";
mymap[1] = "b";
mymap[5] = "c";
mymap[9] = "e";
map<int, char*>::iterator var = mymap.find(5);
// var -> (5,"c")

7. Xóa bỏ 1 phần tử trong map

erase() cho phép xóa một phần tử.
Ví dụ:
map<int, char*> mymap, copymymap;
mymap[0] = "a";
mymap[1] = "b";
mymap[5] = "c";
mymap[7] = "d";
mymap[9] = "e";

// xóa cặp đối tượng với "key" là 5
mymap.erase(5);		
// => mymap =  {(0,"a"),(1,"b"),(7,"d"),(9,"e")}
	
map<int, char*>::iterator var = mymap.begin();
// xóa cặp đối tượng mà var đang truy cập
mymap.erase(var); // => mymap =  {(1,"b"),(7,"d"),(9,"e")}

var = mymap.find(7); // => var truy cập đến (7,"d")

// xóa từ vị trí var đang truy cập cho đến (9,"e") 
mymap.erase(var, mymap.end()); // => mymap = {(1,"b")}

8. Xóa tất cả phần tử trong map

clear() cho phép xóa tất cả phần tử.
Ví dụ:
map<int, char*> mymap;
mymap[0] = "a";
mymap[1] = "b";
mymap[5] = "c";
mymap[7] = "d";
mymap[9] = "e";

mymap.clear();		
// => mymap =  {}

9. Hoán đổi nội dung 2 map

swap() cho phép hoán đổi nội dung của 2 map.
Ví dụ:
map<char,int> map1, map2;

map1['x'] = 100;
map1['y'] = 200;

map2['a'] = 11;
map2['b'] = 22;
map2['c'] = 33;

map1.swap(map2);
// => map1 = {("x",11),("b",22),("c",33)}
// => map2 = {("x",100),("y",200)}
Bài tiếp theo: Bitset - Khái niệm cơ bản >>
vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!