std::set<Key,Compare,Allocator>::equal_range
来自cppreference.com
std::pair<iterator,iterator> equal_range( const Key& key ); |
(1) | |
std::pair<const_iterator,const_iterator> equal_range( const Key& key ) const; |
(2) | |
template< class K > std::pair<iterator,iterator> equal_range( const K& x ); |
(3) | (C++14 起) |
template< class K > std::pair<const_iterator,const_iterator> equal_range( const K& x ) const; |
(4) | (C++14 起) |
返回容器中所有拥有给定关键的元素范围。范围以二个迭代器定义,一个指向首个不小于 key
的元素,另一个指向首个大于 key
的元素。首个迭代器可以换用 lower_bound() 获得,而第二迭代器可换用 upper_bound() 获得。
1,2) 比较关键与
key
。3,4) 比较关键与值
x
。此重载仅若有限定标识 Compare::is_transparent 合法并指代类型才参与重载决议。它允许无需构造 Key
的实例就调用此函数。 本节未完成 原因:更好地解释 |
参数
key | - | 要比较元素的关键值 |
x | - | 能与 Key 比较的替用值
|
返回值
含一对定义所需范围的迭代器的 std::pair :第一个指向首个不小于 key
的元素,第二个指向首个大于 key
的元素。
若无元素不小于 key
,则将尾后(见 end() )迭代器作为第一元素返回。类似地,若无元素大于 key
,则将尾后迭代器作为第二元素返回。
复杂度
与容器大小成对数。
示例
运行此代码
#include <set> #include <iostream> template <typename I> void print_equal_range(I first, I lb, I ub, I last) { for (I i{first}; i != lb; ++i) std::cout << *i << " "; std::cout << "[ "; for (I i{lb}; i != ub; ++i) std::cout << *i << " "; std::cout << ") "; for (I i{ub}; i != last; ++i) std::cout << *i << " "; std::cout << '\n'; } int main() { std::set<int> c{4, 3, 2, 1, 3, 3}; std::cout << "c = "; print_equal_range(begin(c), begin(c), end(c), end(c)); for (int key{}; key != 6; ++key) { std::cout << "key = " << key << "; equal range = "; const auto [lb, ub] = c.equal_range(key); print_equal_range(begin(c), lb, ub, end(c)); } }
输出:
c = [ 1 2 3 4 ) key = 0; equal range = [ ) 1 2 3 4 key = 1; equal range = [ 1 ) 2 3 4 key = 2; equal range = 1 [ 2 ) 3 4 key = 3; equal range = 1 2 [ 3 ) 4 key = 4; equal range = 1 2 3 [ 4 ) key = 5; equal range = 1 2 3 4 [ )
参阅
寻找带有特定键的元素 (公开成员函数) | |
(C++20) |
检查容器是否含有带特定键的元素 (公开成员函数) |
返回匹配特定键的元素数量 (公开成员函数) | |
返回指向首个大于给定键的元素的迭代器 (公开成员函数) | |
返回指向首个不小于给定键的元素的迭代器 (公开成员函数) | |
返回匹配特定键值的元素范围 (函数模板) |