說明
//這個equal_range函式用於在序列中表示一個數值的第一次出現與最後一次出現的後一位,
//與前面介紹的lower_bound,upper_bound是一樣的這個函式返回的是pair類型
//first,secound與上面兩個函式對應
#include"stdafx.h"
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void print(int m){cout<<m<<" ";}
void main()
{
int m[]={1,2,4,2,3,4,5,4,2,3,3,5,2,};
vector<int> mm(m,m+13);
sort(mm.begin(),mm.end());
pair<vector<int>::iterator,vector<int>::iterator> bound;
bound=equal_range(mm.begin(),mm.end(),2);
for_each(bound.first ,bound.second ,print);
cout<<endl;
}
模板函式
頭檔案: <algorithm>
函式名: std::equal_range
函式1 | template <class ForwardIterator, class T> pair<ForwardIterator,ForwardIterator> equal_range (ForwardIterator first, ForwardIterator last, const T& val); |
函式2 | template <class ForwardIterator, class T, class Compare> pair<ForwardIterator,ForwardIterator> equal_range (ForwardIterator first, ForwardIterator last, const T& val, Compare comp); |
獲取相等元素的子範圍.
對於給定的範圍[first,last), 返回所有值和val等價的元素的範圍.
對於函式1. 使用operator<來進行元素比較. 對於函式2. 用comp進行元素比較. 兩個元素a,b,當條件if(!(a<b) && !(b<a)) 或者if(!comp(a,b) && !comp(b,a))成立時,認為這2個元素等價.
原始範圍中的元素應該是已經拍好序的.至少是對val進行過分區( patition) 操作的.
如果範圍中沒有與val等價的值存在.返回的子範圍長度就為零.兩個疊代器都指向大於val的最小值(如果有的話).如果val比範圍中的所有值都大,那么返回的兩個疊代器都指向last.
這個函式模板的行為等價於:
參數
•first, last
•前向疊代器. 指向排好序的序列的第一個和最後一個位置.包括first,但不包括last.
•val
•用來比較的值.
•comp
•二元函式. 接受兩個參數,返回bool. 表明是否第一個參數應該排在第二個參數的前面.此函式不能修改任何參數的內容.這個參數可以是一個函式指針或者函式對象.
返回值
一個pari對象. pair::first是指向子範圍左邊界的疊代器. pair::last是指向子範圍有邊界的疊代器.它們的值和lower_bound,upper_bound分別返回的值相同.
實例
輸出
bounds at positions 2 and 5 |