跳到主要内容

std::unordered_multiset equal_range() 方法

// (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-2) 返回一个包含容器中所有具有给定键 key 的元素的范围。该范围由两个迭代器定义:第一个指向所需范围的第一个元素,第二个指向范围最后一个元素之后的位置。
  • (3-4) 返回一个包含容器中所有具有与 x 等效的键的元素的范围。此重载仅在 Hash::is_transparentKeyEqual::is_transparent 有效且各自表示一个类型时才参与重载解析。这假定这样的 Hash 可以使用 KKey 类型进行调用,并且 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
本文来源于 此 CppReference 页面。可能进行了修改以进行改进或根据编辑者的偏好。点击“编辑此页面”以查看对此文档所做的所有更改。
悬停查看原始许可证。

std::unordered_multiset equal_range() 方法

// (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-2) 返回一个包含容器中所有具有给定键 key 的元素的范围。该范围由两个迭代器定义:第一个指向所需范围的第一个元素,第二个指向范围最后一个元素之后的位置。
  • (3-4) 返回一个包含容器中所有具有与 x 等效的键的元素的范围。此重载仅在 Hash::is_transparentKeyEqual::is_transparent 有效且各自表示一个类型时才参与重载解析。这假定这样的 Hash 可以使用 KKey 类型进行调用,并且 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
本文来源于 此 CppReference 页面。可能进行了修改以进行改进或根据编辑者的偏好。点击“编辑此页面”以查看对此文档所做的所有更改。
悬停查看原始许可证。