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

std::multiset::upper_bound

#include <set>

      iterator upper_bound(const key_type& key);
const_iterator upper_bound(const key_type& key) const;

Trả về một iterator trỏ đến phần tử đầu tiên trong std::multiset có giá trị lớn hơn giá trị key cho trước.

Tham số

key

  • Giá trị cần tìm kiếm.

Giá trị trả về

  • iterator (phiên bản không const): Trả về iterator có thể đọc và ghi, trỏ đến phần tử đầu tiên có giá trị lớn hơn key.
  • const_iterator (phiên bản const): Trả về const_iterator chỉ đọc, trỏ đến phần tử đầu tiên có giá trị lớn hơn key. Phiên bản này được sử dụng khi std::multiset là một đối tượng const.
  • Nếu không có phần tử nào trong std::multiset lớn hơn key, hàm trả về end() (hoặc cend() cho phiên bản const).

Đặc điểm

  1. Tìm kiếm phần tử "lớn hơn": upper_bound() tìm kiếm phần tử đầu tiên có giá trị lớn hơn key.
  2. Sắp xếp: upper_bound() dựa trên thứ tự sắp xếp của các phần tử trong std::multiset.
  3. Trả về end() nếu không tìm thấy: Nếu tất cả các phần tử trong std::multiset đều nhỏ hơn hoặc bằng key, upper_bound() trả về end() (hoặc cend()).
  4. Không thay đổi std::multiset: upper_bound() là một hàm const, nó không làm thay đổi nội dung hay trạng thái của std::multiset.
  5. Phân biệt với lower_bound(): upper_bound() tìm phần tử đầu tiên có giá trị lớn hơn key, trong khi lower_bound() tìm phần tử đầu tiên có giá trị không nhỏ hơn key (lớn hơn hoặc bằng).
  6. Hữu ích với equal_range(): upper_bound() thường được dùng để xác định vị trí kết thúc của một dãy giá trị bằng nhau khi kết hợp với equal_range().
  7. Độ phức tạp: Độ phức tạp của upper_bound()O(log n), với n là số phần tử trong std::multiset.

Ví dụ

#include <iostream>
#include <set>

int main() {
std::multiset<int> mymultiset = {10, 20, 30, 30, 40, 50};

// Tìm phần tử đầu tiên lớn hơn 25
auto it = mymultiset.upper_bound(25);
if (it != mymultiset.end()) {
std::cout << "The upper bound of 25 is: " << *it << '\n'; // Output: The upper bound of 25 is: 30
} else {
std::cout << "No element is greater than 25\n";
}

// Tìm phần tử đầu tiên lớn hơn 30
it = mymultiset.upper_bound(30);
if (it != mymultiset.end()) {
std::cout << "The upper bound of 30 is: " << *it << '\n'; // Output: The upper bound of 30 is: 40
} else {
std::cout << "No element is greater than 30\n";
}

// Tìm phần tử đầu tiên lớn hơn 5 (tồn tại)
it = mymultiset.upper_bound(5);
if (it != mymultiset.end()) {
std::cout << "The upper bound of 5 is: " << *it << '\n'; // Output: The upper bound of 5 is: 10
} else {
std::cout << "No element is greater than 5\n";
}

// Tìm phần tử đầu tiên lớn hơn 50 (không tồn tại)
it = mymultiset.upper_bound(50);
if (it != mymultiset.end()) {
std::cout << "The upper bound of 50 is: " << *it << '\n';
} else {
std::cout << "No element is greater than 50\n"; // Output: No element is greater than 50
}

return 0;
}

Các hàm liên quan

lower_boundTrả về một iterator trỏ đến phần tử đầu tiên trong std::multiset có giá trị lớn hơn hoặc bằng giá trị key cho trước
equal_rangeTrả về một cặp iterator xác định phạm vi các phần tử trong std::multiset có giá trị bằng với giá trị key cho trước
findTìm kiếm một phần tử có giá trị bằng với giá trị cho trước trong std::multiset
countĐếm số lượng phần tử có giá trị bằng với giá trị cho trước trong std::multiset