📅  最后修改于: 2023-12-03 15:29:53.963000             🧑  作者: Mango
std::less_equal
是C++标准库中定义的二元比较函数对象,用于比较两个元素是否相等或者第一个元素是否小于等于第二个元素。它可以用于任何可比较的数据类型,并且可以通过重载运算符<=
来自定义比较规则。该函数对象常用于STL容器的排序和查找算法中。
std::less_equal
需要头文件<functional>
来引用。它的用法非常简单,只需要将它作为模板类实例化,并将其作为第三个参数传递给需要比较的STL算法即可。例如,以下代码实现了对一个vector<int>
的排序,其中元素按升序排列。
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
int main() {
std::vector<int> v{4, 2, 3, 1};
std::sort(v.begin(), v.end(), std::less_equal<int>());
// 输出排序后的结果
for (const auto& item : v) {
std::cout << item << " ";
}
std::cout << std::endl;
}
以上代码输出结果为:
4 3 2 1
可以看出,元素被按照非降序排列。这是因为std::sort
算法默认使用std::less
函数对象进行比较,而std::less_equal
则是按照非降序排列的。
以下是一个更复杂的示例,展示如何利用std::less_equal
设计一个函数模板来查找容器中大于或等于某个值的元素,并将这些元素存储在另一个容器中。
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
// 查找大于或等于给定值的元素,并将它们存储在out容器中
template<typename T>
void find_greater_or_equal(const std::vector<T>& v, const T& value, std::vector<T>& out) {
auto is_greater_or_equal = std::less_equal<T>();
for (const auto& item : v) {
if (is_greater_or_equal(item, value)) {
out.push_back(item);
}
}
}
int main() {
std::vector<int> v{3, 1, 4, 1, 5, 9, 2, 6, 5};
int target_value = 4;
std::vector<int> out;
// 查找大于或等于4的元素,并将结果存储在out容器中
find_greater_or_equal(v, target_value, out);
// 输出结果
std::cout << "源数据: ";
for (const auto& item : v) {
std::cout << item << " ";
}
std::cout << std::endl;
std::cout << "查找大于或等于 " << target_value << " 的元素,结果: ";
for (const auto& item : out) {
std::cout << item << " ";
}
std::cout << std::endl;
}
输出结果为:
源数据: 3 1 4 1 5 9 2 6 5
查找大于或等于 4 的元素,结果: 4 5 9 6 5
以上代码示例中,find_greater_or_equal
函数接受一个vector<T>
、一个value
和一个用来存储结果的输出容器。它遍历输入容器,使用std::less_equal<T>
函数对象判断每个元素是否大于或等于目标值,如果是就将其存储在输出容器中。可以看到,使用std::less_equal
非常方便,只需要将其作为函数的一个参数,就可以自由地定义比较规则。