std::unordered_multiset equal_range() 方法
- 自 C++20 起
- 自 C++11 起
// (1) Non const version
std::pair<iterator, iterator> equal_range( const Key& key );
// (2) Const version
std::pair<const_iterator, const_iterator> equal_range( const Key& key ) const;
// (3) Non const version
template< class K >
std::pair<iterator, iterator> equal_range( const K& x );
// (4) Const version
template< class K >
std::pair<const_iterator, const_iterator> equal_range( const K& x ) const;
// (1) Non const version
std::pair<iterator, iterator> equal_range( const Key& key );
// (2) Const version
std::pair<const_iterator, const_iterator> equal_range( const Key& key ) const;
- (1-2) 返回一个包含容器中所有具有给定键
key
的元素的范围。该范围由两个迭代器定义:第一个指向所需范围的第一个元素,第二个指向范围最后一个元素之后的位置。 - (3-4) 返回一个包含容器中所有具有与
x
等效的键的元素的范围。此重载仅在Hash::is_transparent
和KeyEqual::is_transparent
有效且各自表示一个类型时才参与重载解析。这假定这样的Hash
可以使用K
和Key
类型进行调用,并且KeyEqual
是透明的,这使得可以在不构造Key
实例的情况下调用此函数。
参数
key
- 要计数的元素的键值x
- 可以与键透明比较的任何类型的值
返回值
包含定义所需范围的迭代器对的 std::pair
。
如果没有此类元素,则将返回 past-the-end(参见 end()
)迭代器作为对的两个元素。
复杂度
平均情况下,与键为 key
的元素数量呈线性关系 - O(N),其中 N 是键为 key
的元素数量。
最坏情况下,与容器的大小呈线性关系 - O(size())。
异常
(无)
备注
特性测试宏:__cpp_lib_generic_unordered_lookup
(用于重载 (3-4))。
示例
Main.cpp
#include <iostream>
#include <iterator>
#include <string>
#include <unordered_set>
int main()
{
std::string sentence{"cppreference.com"};
std::cout << "The sentence: " << sentence << '\n';
std::unordered_multiset<char> sequence;
for (char x : sentence) { sequence.insert(x); }
std::cout << "The sequence: { ";
for (char x : sequence) { std::cout << x << ' '; }
std::cout << "}\n" "Symbol:Frequency: ";
for (auto it = sequence.begin(); it != sequence.end(); ) {
if (auto [first, last] = sequence.equal_range(*it); first != last) {
std::cout << *first << ":" << std::distance(first, last) << " ";
it = last;
} else {
++it;
}
}
}
输出
The sentence: cppreference.com
The sequence: { m o c c c p p r r e e e e f n . }
Symbol:Frequency: m:1 o:1 c:3 p:2 r:2 e:4 f:1 n:1 .:1