Chuyển tới nội dung chính

std::multimap::value_comp

#include <map>

value_compare value_comp() const;

Trả về một hàm so sánh (comparison object) dùng để so sánh các value_type (tức là các std::pair) trong std::multimap. Hàm này so sánh các cặp key-value dựa trên key của chúng, sử dụng hàm so sánh key (key_compare) của std::multimap.

Tham số

Không có tham số

Giá trị trả về

  • value_compare: Trả về một hàm so sánh (comparison object) có thể được sử dụng để so sánh hai đối tượng value_type (tức là hai std::pair) của std::multimap. Hàm so sánh này so sánh các cặp key-value dựa trên key của chúng và sử dụng hàm so sánh key (key_compare) của std::multimap để thực hiện so sánh.

Đặc điểm

  1. Truy cập hàm so sánh: value_comp() cung cấp cách thức để lấy hàm so sánh đang được sử dụng bởi std::multimap để so sánh các cặp key-value dựa trên key.
  2. const: value_comp() là một hàm const, nghĩa là nó không thay đổi trạng thái của std::multimap.
  3. Không ném ngoại lệ: Hàm value_comp() được quy định không ném ra ngoại lệ.
  4. Phụ thuộc vào cách khởi tạo: Hàm so sánh trả về bởi value_comp() phụ thuộc vào cách bạn khởi tạo std::multimap (cụ thể là hàm so sánh key key_compare).
  5. So sánh dựa trên key: Hàm so sánh trả về bởi value_comp() luôn so sánh các cặp key-value dựa trên key, không phải value.
  6. Độ phức tạp: O(1) - thời gian hằng số.
Phân biệt với key_comp()
  • key_comp() trả về hàm so sánh để so sánh hai key.
  • value_comp() trả về hàm so sánh để so sánh hai cặp key-value (kiểu std::pair), nhưng việc so sánh vẫn dựa trên key của cặp.

Ví dụ

#include <iostream>
#include <map>

int main() {
std::multimap<int, std::string> mymultimap;
mymultimap.insert(std::make_pair(10, "ten"));
mymultimap.insert(std::make_pair(5, "five"));
mymultimap.insert(std::make_pair(15, "fifteen"));
mymultimap.insert(std::make_pair(5, "five duplicated"));

// Lấy hàm so sánh value_compare
std::multimap<int, std::string>::value_compare comp = mymultimap.value_comp();

// Lấy phần tử cuối cùng trong multimap
std::multimap<int, std::string>::iterator last = --mymultimap.end();

// Duyệt multimap từ đầu đến cuối sử dụng value_comp()
std::cout << "mymultimap contains:\n";
std::multimap<int, std::string>::iterator it = mymultimap.begin();
do {
std::cout << it->first << " => " << it->second << '\n';
} while ( comp(*it++, *last) ); // So sánh các cặp key-value dựa trên key

return 0;
}

Các hàm liên quan

key_compTrả về một bản sao của hàm so sánh được sử dụng bởi std::multimap để sắp xếp các key
findTìm kiếm một phần tử có key bằng với giá trị key cho trước trong std::multimap
countĐếm số lượng phần tử có key bằng với giá trị key cho trước trong std::multimap
lower_boundTrả về một iterator trỏ đến phần tử đầu tiên trong std::multimap có key lớn hơn hoặc bằng giá trị key cho trước
upper_boundTrả về một iterator trỏ đến phần tử đầu tiên trong std::multimap có key lớn hơn giá trị key cho trước