std::equal_range
来自cppreference.com
该页由英文版wiki使用Google Translate机器翻译而来。
该翻译可能存在错误或用词不当。鼠标停留在文本上可以看到原版本。你可以帮助我们修正错误或改进翻译。参见说明请点击这里. |
在头文件 <algorithm> 中定义
|
||
template< class ForwardIt, class T > std::pair<ForwardIt,ForwardIt> |
(1) | |
template< class ForwardIt, class T, class Compare > std::pair<ForwardIt,ForwardIt> |
(2) | |
返回一个范围,等于在已排序的范围
value
[first, last)
包含的所有元素。范围是指由两个迭代器指向的第一个元素是“不低于”比value
和其他指标的第一个元素,一个“更大的,比value
”。可能可以得到第一个迭代器与lower_bound()
,第二 - upper_bound()
.原文:
Returns a range containing all elements equal to
value
in the sorted range [first, last)
. The range is defined by two iterators, one pointing to the first element that is not less than value
and another pointing to the first element greater than value
. The first iterator may be alternatively obtained with lower_bound()
, the second - with upper_bound()
.operator<的第一个版本使用比较的元素,第二个版本使用给定的比较函数
comp
.原文:
The first version uses operator< to compare the elements, the second version uses the given comparison function
comp
.目录 |
[编辑] 参数
first, last | - | 检查的元素
|
value | - | 值进行比较的元素
|
comp | - | comparison function which returns true if the first argument is less than the second. The signature of the comparison function should be equivalent to the following: bool cmp(const Type1 &a, const Type2 &b); The signature does not need to have const &, but the function must not modify the objects passed to it. |
类型要求 | ||
-ForwardIt 必须满足 ForwardIterator 的要求。
|
[编辑] 返回值
std::pair含有对限定想要的范围内的迭代器,指向的第一个元素是“不”比
value
和第二指向的第一个元素的第一“更大的”比value
. 原文:
std::pair containing a pair of iterators defining the wanted range, the first pointing to the first element that is not less than
value
and the second pointing to the first element greater than value
. 如果有任何元素,“不低于”比
value
,last
返回的第一个元素。同样,如果没有任何元素“更大的”比value
,last
返回的第二个元素原文:
If there are no elements not less than
value
, last
is returned as the first element. Similarly if there are no elements greater than value
, last
is returned as the second element[编辑] 复杂度
first
和last
之间的距离在对数原文:
Logarithmic in the distance between
first
and last
[编辑] 可能的实现
版本一 |
---|
template<class ForwardIt, class T std::pair<ForwardIt,ForwardIt> equal_range(ForwardIt first, ForwardIt last, const T& value) { return std::make_pair(std::lower_bound(first, last, value), std::upper_bound(first, last, value)); } |
版本二 |
template<class ForwardIt, class T, class Compare> std::pair<ForwardIt,ForwardIt> equal_range(ForwardIt first, ForwardIt last, const T& value, Compare comp); { return std::make_pair(std::lower_bound(first, last, value, comp), std::upper_bound(first, last, value, comp)); } |
[编辑] 示例
#include <algorithm> #include <vector> #include <iostream> struct S { int number; char name; S ( int number, char name ) : number ( number ), name ( name ) {} // only the number is relevant with this comparison bool operator< ( const S& s ) const { return number < s.number; } }; int main() { std::vector<S> vec = { {1,'A'}, {2,'B'}, {2,'C'}, {2,'D'}, {3,'F'}, {4,'G'} }; S value ( 2, '?' ); auto p = std::equal_range(vec.begin(),vec.end(),value); for ( auto i = p.first; i != p.second; ++i ) std::cout << i->name << ' '; }
输出:
B C D
[编辑] 另请参阅
返回指向第一个不小于给定值的元素的迭代器 (函数模板) | |
返回指向第一个大于给定值的元素的迭代器 (函数模板) | |
判断一个元素是否在区间内 (函数模板) |