这里有容易混淆的点,即:
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的元素的迭代器。