std::set<Key,Compare,Allocator>:: equal_range
From cppreference.net
|
std::
pair
<
iterator, iterator
>
equal_range
(
const
Key
&
key
)
;
|
(1) | (自 C++26 起为 constexpr) |
|
std::
pair
<
const_iterator, const_iterator
>
equal_range ( const Key & key ) const ; |
(2) | (自 C++26 起为 constexpr) |
|
template
<
class
K
>
std:: pair < iterator, iterator > equal_range ( const K & x ) ; |
(3) |
(自 C++14 起)
(自 C++26 起为 constexpr) |
|
template
<
class
K
>
std::
pair
<
const_iterator, const_iterator
>
|
(4) |
(自 C++14 起)
(自 C++26 起为 constexpr) |
返回一个包含容器中所有具有给定键的元素的区间。该区间由两个迭代器定义,一个指向第一个 不小于 给定键的元素,另一个指向第一个大于给定键的元素。
或者,第一个迭代器可以通过 lower_bound() 获得,第二个迭代器可以通过 upper_bound() 获得。
1,2)
将键与
key
进行比较。
3,4)
将键与值
x
进行比较。
目录 |
参数
| key | - | 用于比较元素的键值 |
| x | - |
可与
Key
进行比较的替代值
|
返回值
std::pair 包含一对定义所需范围的迭代器:
- 第一个迭代器指向第一个不小于给定键的元素,若不存在此类元素则指向 end ( ) 。
- 第二个迭代器指向第一个大于给定键的元素,若不存在此类元素则指向 end ( ) 。
复杂度
与容器大小呈对数关系。
注释
| 功能测试 宏 | 值 | 标准 | 功能 |
|---|---|---|---|
__cpp_lib_generic_associative_lookup
|
201304L
|
(C++14) | 关联容器 中的异构比较查找,用于重载版本 ( 3,4 ) |
示例
运行此代码
#include <set> #include <functional> #include <print> #include <ranges> #include <string> #include <string_view> #include <tuple> struct Names { std::string forename, surname; friend auto operator<(const Names& lhs, const Names& rhs) { return std::tie(lhs.surname, lhs.forename) < std::tie(rhs.surname, rhs.forename); } }; struct SurnameCompare { std::string_view surname; friend bool operator<(const Names& lhs, const SurnameCompare& rhs) { return lhs.surname < rhs.surname; } friend bool operator<(const SurnameCompare& lhs, const Names& rhs) { return lhs.surname < rhs.surname; } }; std::set<Names, std::less<>> characters { {"Homer", "Simpson"}, {"Marge", "Simpson"}, {"Lisa", "Simpson"}, {"Ned", "Flanders"}, {"Joe", "Quimby"} }; void print_unique(const Names& names) { auto [begin, end] = characters.equal_range(names); std::print ( "Found {} characters with name \"{} {}\"\n", std::distance(begin, end), names.forename, names.surname ); } void print_by_surname(std::string_view surname) { auto [begin, end] = characters.equal_range(SurnameCompare{surname}); std::print("Found {} characters with surname \"{}\":\n", std::distance(begin, end), surname); for (const Names& names : std::ranges::subrange(begin, end)) std::print(" {} {}\n", names.forename, names.surname); } int main() { print_unique({"Maude", "Flanders"}); print_unique({"Lisa", "Simpson"}); print_by_surname("Simpson"); }
输出:
Found 0 characters with name "Maude Flanders"
Found 1 characters with name "Lisa Simpson"
Found 3 characters with surname "Simpson":
Homer Simpson
Lisa Simpson
Marge Simpson
参见
|
查找具有特定键的元素
(公开成员函数) |
|
|
(C++20)
|
检查容器是否包含具有特定键的元素
(公开成员函数) |
|
返回匹配特定键的元素数量
(公开成员函数) |
|
|
返回指向首个
大于
给定键的元素的迭代器
(公开成员函数) |
|
|
返回指向首个
不小于
给定键的元素的迭代器
(公开成员函数) |
|
|
返回匹配特定键的元素范围
(函数模板) |