C++学习——std顺序容器和关联容器的lower_bound操作

本文介绍了C++中std::lower_bound算法在顺序容器如std::vector中的使用,以及在关联容器如std::map中的成员函数lower_bound().这两个功能都用于查找特定key附近的元素,前者返回不小于给定值的元素迭代器,后者返回大于或等于给定键的元素迭代器。文章通过示例代码展示了如何在实践中应用这些方法。
摘要由CSDN通过智能技术生成

这里有容易混淆的点,即:
std 顺序容器和关联容器如map的lower_bound

在 C++ 的顺序容器中,如果你想要查找不大于某个 key 的 value,可以使用 std::lower_bound 算法。这个算法返回一个迭代器,指向第一个不小于给定 key 的元素。

下是一个示例代码,演示如何使用 std::lower_bound 来查找不大于某个 key 的 value:

cpp
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> values = {1, 3, 5, 7, 9};

    int key = 6;

 auto it = std::lower_bound(values.begin(), values.end(), key);

    if (it != values.begin()) {
        // 找到了不大于 key 的元素
        --it;
        std::cout << "Value: " << *it << std::endl;
    } else {
        // 没有找到不大于 key 的元素
        std::cout << "No value found." << std::endl;
    }

    return 0;
}

在上面的例中,我们定义了一个包含一些整数的 std::vector 容器,并且设定了要查找的 key 为 6。然后,我们使用 std::lower_bound 来查找不于 key 的元素,并将结果保存在迭代器 it 中。

如果 it 不等于容器的起始迭代器 values.begin(),则表示找到不大于 key 的元素。我们通过迭代器 it 减一来获取该元素,并输出其值。

如果 it 等于器的起始迭代器 values.begin(),则表示没有找到不大于 key 的元素。

在上述示例,输出将是 “Value: 5”,因为 5 是不大于 6 的最接近的值。

在C++中,关联容器提供了一种键值对的映射std::map类模板提供了一个名为lower_bound()的成员函数,用于查找大于或等于给定键的一个元素的迭代器。

lower_bound()函数的语法如下:

iterator lower_bound (const key_type& k);

其中,k是要查找的键。该函数返回一个迭代器,指向std::map中第一个大于或等于k的元素。如果不存在这样的元素,则返回指向std::map末尾的迭代器。

以下是一个示例代码,演示如何使用lower_bound()函数:

#include <iostream>
#include <map>

int main() {
    std::map<int, std::string> myMap;
    myMap[1] = "One";
    myMap[2] = "Two";
    myMap[3] = "Three";
    myMap[4] = "Four";
    myMap[5] = "Five";

 // 使用 lower_bound 查找大于或等于 3 的第一个元素
    auto it = myMap.lower_bound(3);

    if (it != myMap.end()) {
        std::cout << "Key: << it->first << ", Value: " it->second << std::endl;
    } else {
        std::cout << "Element not found." std::endl;
    }

    return 0;
}

输出结果将是:

Key: 3, Value: Three

在这个示例中,lower_bound(3)返回一个指向键为3的元素的迭代器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量化橙同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值