Tìm phần tử trong unordered_map C++ (find, lower_bound, upper_bound, equal_range, cout) | Laptrinhcanban.com

HOME › >>

Tìm phần tử trong unordered_map C++ (find, lower_bound, upper_bound, equal_range, cout)

Hướng dẫn cách tìm phần tử trong unordered_map. Bạn sẽ học được cách sử dụng các hàm như find và equal_range để tìm phần tử trong unordered_map, cũng như hàm cout() để đếm số lần xuất hiện của phần tử đó theo khóa trong unordered_map C++ sau bài học này.

Khác với map hay multimap, do trong unordered_map các phần tử không có thứ tự, nên cũng không tồn tại các hàm lower_bound và upper_bound.

Tìm phần tử trong unordered_map C++ bằng hàm find

Hàm find là một hàm thành viên trong class std:unordered_map, có tác dụng tìm vị trí phần tử có khóa chỉ định trong unordered_map.

Chúng ta sử dụng hàm find trong C++ với cú pháp sau đây:

mp.find(key);

Trong đó key là khóa của phần tử cần tìm trong unordered_map mp.

Hàm find() sẽ trả về trình lặp trỏ đến vị trí phần tử, nếu nó tồn tại trong unordered_map. Và nếu phần tử đó không tồn tại, hàm sẽ trả về trình lặp trỏ đến vị trí cuối cùng trong unordered_map.

Bằng cách ứng dụng hàm find(), chúng ta có thể tìm ra vị trí của phần tử đó trong unordered_map, rồi kết hợp với hàm clear() để xóa nó đi như ví dụ cụ thể sau đây:

#include <iostream>
#include <unordered_map>
using namespace std;

//Tạo hàm xuất unordered_map
void dump(unordered_map<char,int>& mp)
{
for (auto x: mp) {
cout << x.first << ":" << x.second << " ";
}
cout << endl;
}

int main() {
unordered_map<char,int> mp;
mp.insert(make_pair('a', 1));
mp.insert(make_pair('b', 2));
mp.insert(make_pair('c', 3));
mp.insert(make_pair('d', 1));
mp.insert(make_pair('e', 2));

dump(mp);

//Tìm phần tử có khoá bằng 'c' trong multiset
auto itr = mp.find('c');

//Xóa phần tử vừa tìm thấy
mp.erase (itr);
dump(mp);

return 0;
}

Kết quả:

e:2 d:1 c:3 b:2 a:1 
e:2 d:1 b:2 a:1

Tìm phần tử trong unordered_map C++ bằng hàm equal_range

Hàm equal_range là một hàm thành viên trong class std:unordered_map, có tác dụng tìm phạm vi của tất cả các phần tử có khóa giống với khóa chỉ định trong unordered_map.

Chúng ta sử dụng hàm equal_range trong C++ với cú pháp sau đây:

mp.equal_range(key);

Trong đó key là khóa của phần tử cần tìm trong unordered_map mp.

Hàm equal_range() sẽ trả về một cặp giá trị, với giá trị đầu tiên trỏ đến đầu phạm vi, và giá trị thứ hai trỏ đến cuối phạm vi chứa tất cả các phần tử có khóa giống khóa chỉ định.

Tuy nhiên do trong unordered_map thì các khóa là duy nhất, do đó nếu khóa tồn tại trong unordered_map thì hàm equal_range sẽ trả về một khoảng chứa giá trị duy nhất đó mà thôi.

Bằng cách ứng dụng hàm equal_range(), chúng ta có thể tìm ra phạm vi chứa phần tử có khóa chỉ định trong unordered_map như sau

#include <iostream>
#include <unordered_map>
using namespace std;

//Tạo hàm xuất unordered_map
void dump(unordered_map<char,int>& mp)
{
for (auto x: mp) {
cout << x.first << ":" << x.second << " ";
}
cout << endl;
}

int main() {
unordered_map<char,int> mp;
mp.insert(make_pair('a', 1));
mp.insert(make_pair('b', 2));
mp.insert(make_pair('c', 3));
mp.insert(make_pair('d', 1));
mp.insert(make_pair('e', 2));

dump(mp);

//Tìm phần tử có khóa bằng 'c' trong unordered_map
auto ret = mp.equal_range('c');

cout << "lower bound points to: ";
cout << ret.first->first << ":" << ret.first->second << '\n';

cout << "upper bound points to: ";
cout << ret.second->first << ":" << ret.second->second << '\n';

return 0;
}

Kết quả:

e:2 d:1 c:3 b:2 a:1 
lower bound points to: c:3
upper bound points to: b:2

Đếm số lần xuất hiện của phần tử trong unordered_map C++ bằng hàm count

Hàm count là một hàm thành viên trong class std:unordered_map, có tác dụng đếm số lần xuất hiện của phần tử trong unordered_map C++ thông qua khóa của nó.

Chúng ta sử dụng hàm count trong C++ với cú pháp sau đây:

mp.count(key);

Trong đó key là khóa của phần tử cần đếm số lần xuất hiện trong unordered_map mp.

Do trong unordered_map các khóa là duy nhất, nên một phần tử nếu tồn tại cũng chỉ có xuất hiện 1 lần duy nhất trong unordered_map mà thôi.

Do vậy, kết quả trả về của hàm count() cũng chỉ là 0 tương ứng với phần tử không tồn tại, hoặc 1 tương ứng với phần tử tồn tại trong unordered_map đó.

Ví dụ cụ thể:

#include <iostream>
#include <unordered_map>
using namespace std;

int main() {
unordered_map<char,int> mp;
mp['a']=100;
mp['b']=200;
mp['c']=300;


//Đếm số lần xuất hiện của phần tử tồn tại trong unordered_map
cout << mp.count('b') <<endl;

//Đếm số lần xuất hiện của phần tử không tồn tại trong unordered_map
cout << mp.count('f') <<endl;

return 0;
}

Kết quả:

1
0

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về cách tìm phần tử unordered_map trong C++ rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C++ trong các bài học tiếp theo.

URL Link

https://laptrinhcanban.com/cpp/lap-trinh-cpp-co-ban/unordered-map-trong-cpp/tim-va-dem-phan-tu-trong-unordered-map-cpp/

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME  › >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.