📜  C++ STL中的unordered_multimap begin()和end()函数(1)

📅  最后修改于: 2023-12-03 14:39:52.317000             🧑  作者: Mango

C++ STL中的unordered_multimap begin()和end()函数

unordered_multimap

在介绍 begin()end() 函数前,先来简单介绍一下 unordered_multimapunordered_multimap 是 C++ STL 中的关联式容器之一,它允许存储多个具有相同关键字的键值对,并不保证键值对的顺序。unordered_multimap 使用哈希表实现,因此可以在平均 O(1) 的时间内进行插入、删除和查找操作。

unordered_multimap 的定义和用法

unordered_multimap 的定义如下:

template< class Key,                                      // unordered_map::key_type
          class T,                                        // unordered_map::mapped_type
          class Hash = hash<Key>,                         // unordered_map::hasher
          class Pred = equal_to<Key>,                     // unordered_map::key_equal
          class Alloc = allocator<pair<const Key,T>>      // unordered_map::allocator_type
          > class unordered_multimap;

其中,Key 为键的类型,T 为值的类型,Hash 为哈希函数类型,默认为 std::hash<Key>Pred 为判断键是否相等的二元谓词类型,默认为 std::equal_to<Key>Alloc 为存储键值对的分配器类型,默认为 std::allocator<std::pair<const Key,T>>

unordered_multimap 的用法和 unordered_map 类似,主要有插入、查找、删除、遍历等操作。

unordered_multimap 的 begin() 和 end() 函数

unordered_multimap 提供了 begin()end() 函数,用于返回指向容器第一个元素和最后一个元素之后位置的迭代器。

begin()

begin() 函数的定义如下:

iterator begin() noexcept;
const_iterator begin() const noexcept;
const_iterator cbegin() const noexcept;

begin() 返回一个迭代器,指向容器中第一个元素,如果容器为空,则返回的迭代器等同于 end()cbegin() 返回的也是指向容器中第一个元素的迭代器,但它是一个常量迭代器,不能修改容器中元素的值。

end()

end() 函数的定义如下:

iterator end() noexcept;
const_iterator end() const noexcept;
const_iterator cend() const noexcept;

end() 返回一个迭代器,指向容器中最后一个元素之后的位置,如果容器为空,则返回的迭代器等同于 begin()cend() 返回的也是指向容器中最后一个元素之后位置的迭代器,但它是一个常量迭代器,不能修改容器中元素的值。

代码示例
#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_multimap<int, int> umap;
    umap.insert({1, 2});
    umap.insert({1, 3});
    umap.insert({2, 4});

    // 遍历 unordered_multimap
    std::cout << "umap contains:\n";
    for (auto iter = umap.begin(); iter != umap.end(); ++iter) {
        std::cout << iter->first << ": " << iter->second << std::endl;
    }

    return 0;
}

输出结果为:

umap contains:
1: 2
1: 3
2: 4

在这个例子中,我们使用 unordered_multimap 存储多个具有相同关键字的键值对。然后,我们使用 begin()end() 函数遍历 unordered_multimap 中的元素,并输出它们的键和值。可以看到,例如 {1, 2}{1, 3} 这两个键值对具有相同的键 1,它们被存储在 unordered_multimap 中并按照插入的顺序分别输出。