这两个算法默认用于升序序列,若要用于降序序列必须指定比较函数!!!!
对于升序序列:
lower_bound返回第一个大于等于val的元素的迭代器
upper_bound返回第一个大于val的元素的迭代器
对于降序序列:
必须指定比较函数:
static bool weightComp(int a, int b)
{
return a > b;
}
lower_bound返回第一个小于等于val的元素的迭代器
upper_bound返回第一个小于val的元素的迭代器
可以用下面这段代码来测试:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
static bool weightComp(int a, int b)
{
return a > b;
}
int main()
{
std::vector<int> vecInt;
vecInt.push_back(1);
vecInt.push_back(3);
vecInt.push_back(4);
vecInt.push_back(19);
vecInt.push_back(5);
vecInt.push_back(3);
vecInt.push_back(2);
vecInt.push_back(4);
std::sort(vecInt.rbegin(), vecInt.rend());
for (auto itt : vecInt)
{
std::cout << itt << endl;
}
std::vector<int>::iterator it;
it = lower_bound(vecInt.begin(), vecInt.end(), 4, weightComp);
std::cout << "lower bound at: " << it - vecInt.begin() << endl;
std::cout << "lower bound: " << *it << endl;
it = upper_bound(vecInt.begin(), vecInt.end(), 4, weightComp);
std::cout << "upper bound at: " << it - vecInt.begin() << endl;
std::cout << "upper bound: " << *it << endl;
return 0;
}