📌  相关文章
📜  C++中对对集合上lower_bound和upper_bound的实现(1)

📅  最后修改于: 2023-12-03 14:59:49.969000             🧑  作者: Mango

C++中对集合上lower_bound和upper_bound的实现

在 C++ 中,std::setstd::multiset 是常用的集合容器,它们内部维护了一棵平衡二叉搜索树。在这些容器中,lower_bound()upper_bound() 是常用的函数之一,用于查找指定元素在集合中的位置。

lower_bound()

lower_bound() 函数返回一个指针,指向集合中第一个大于或等于指定元素的元素。如果集合中不存在大于或等于指定元素的元素,则返回指向集合末尾的指针。

以下是 lower_bound() 函数的示例代码:

#include <iostream>
#include <set>

int main() {
    std::set<int> s{1, 2, 3, 4, 5};

    // 返回一个指向值为3的元素的迭代器
    std::set<int>::iterator it_low = s.lower_bound(3);

    if (it_low != s.end()) {
        std::cout << *it_low << std::endl; // 输出 3
    }
    
    // 查找集合中不存在的元素
    std::set<int>::iterator it_not_found = s.lower_bound(6);

    if (it_not_found == s.end()) {
        std::cout << "Element not found!" << std::endl;
    }

    return 0;
}

在上面的示例代码中,我们使用 lower_bound() 函数找到了值为3的元素的位置。如果我们查找一个不存在的元素,函数会返回指向集合末尾的指针。

upper_bound()

upper_bound() 函数返回一个指针,指向集合中第一个大于指定元素的元素。如果集合中不存在大于指定元素的元素,则返回指向集合末尾的指针。

以下是 upper_bound() 函数的示例代码:

#include <iostream>
#include <set>

int main() {
    std::set<int> s{1, 2, 3, 4, 5};

    // 返回一个指向值为4的元素的迭代器
    std::set<int>::iterator it_up = s.upper_bound(3);

    if (it_up != s.end()) {
        std::cout << *it_up << std::endl; // 输出 4
    }
    
    // 查找集合中不存在的元素
    std::set<int>::iterator it_not_found = s.upper_bound(5);

    if (it_not_found == s.end()) {
        std::cout << "Element not found!" << std::endl;
    }

    return 0;
}

在上面的示例代码中,我们使用 upper_bound() 函数找到了值为3的元素之后的位置,也就是值为4元素的位置。如果我们查找一个不存在的元素,则返回指向集合末尾的指针。

总结

lower_bound()upper_bound() 函数是 std::setstd::multiset 容器中的重要成员函数。它们可以快速查找集合中指定元素的位置,对于处理多个元素值相同的情况尤其有用。本文中展示了使用这两个函数的示例代码,希望能对大家的学习有所启发。