库函数equal_range(iterator.begin(), iterator.end(), target)
其中查找范围为[iterator.begin(),iterator.end())左闭右开 目标值为target
如果查找失败, 这2个迭代器要么都指向大于target的第一个元素(如果有), 要么都和iterator.end()迭代器指向相同
要求数组或容器内的元素有序(非严格来说), 比较规则可以使用cmp函数自定义
其中[非严格来说]是指: 所谓“已排好序”, 并不是要求 [first, last)
区域内的数据严格按照某个排序规则进行升序或降序排序, 只要满足“所有令 element<val(或者
comp(element,val)成立的元素都位于不成立元素的前面(其中 element 为指定范围内的元素)”即可。
参考文献
C语言中文网 http://c.biancheng.net/view/7531.html
示例代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
vector<int> w;
int a[10] = {1,2,3,4,4,4,4,5,6};
int main()
{
//在数组a中查找4的范围
pair<int*, int*> u = equal_range(a, a + 9, 4);
//输出目标值4的起始位置和结束位置
cout << u.first - a << ' ' << u.second - a - 1 << endl;
//在vector中查找4的范围
for(int i = 0; i < 9; i ++ ) w.push_back(a[i]);
pair<vector<int>::iterator, vector<int>::iterator> r = equal_range(w.begin(), w.end(), 4);
//输出目标值4的起始位置和结束位置
cout << r.first - w.begin() << " " << r.second - w.begin() - 1;
return 0;
}