C++ STL中的unordered_multimap insert()函数

C++ STL中的unordered_multimap insert()函数

C++ STL中,unordered_multimap容器是一个无序关联容器,它允许以常数时间O(1)访问元素,并且可以存储具有相同键值的多个元素。与multimap容器不同的是,unordered_multimap没有任何排序限制。unordered_multimap容器中的键和值都可以是任何类型的数据。

unordered_multimap容器提供了一系列函数来操作其元素,其中插入和删除函数是最常用的方法之一。

unordered_multimap insert()函数简介

insert()函数是unordered_multimap容器中用来插入元素的函数,它的语法格式如下:

iterator insert (const value_type& val);

该函数返回一个插入的迭代器,该迭代器指向刚刚插入的元素。

  • val:要插入的元素,可以是键和值的pair类型或具有相同类型的元素。

insert()函数的参数类型是pair类型,该类型是一个模板容器,可以包含任意数量的变量,例如:

std::pair<int, std::string> mypair (10,"mystring");

C++ STL库中,有一个函数make_pair(),它可以将两个变量合并成一个pair类型的容器,例如:

auto mypair = std::make_pair(10, "mystring");

unordered_multimap insert()函数用法

插入操作可通过多种方式完成,例如:

在末尾插入一个新元素

可以使用unordered_multimap容器的insert()函数将一个新的元素插入到容器的末尾,例如:

#include <iostream>
#include <unordered_map>
#include <string>

int main()
{
    std::unordered_multimap<int, std::string> umap;
    umap.insert(std::make_pair(1, "John"));
    umap.insert(std::make_pair(2, "Mary"));
    umap.insert(std::make_pair(3, "Bob"));
    umap.insert(std::make_pair(4, "Alice"));

    // 遍历所有元素并输出
    for (const auto& i : umap)
        std::cout << i.first << " : " << i.second << std::endl;

    return 0;
}

程序输出:

1 : John
2 : Mary
3 : Bob
4 : Alice

插入一系列元素

还可以使用unordered_multimap容器的另一个insert()函数版本,在一个容器中插入一系列元素,例如:

#include <iostream>
#include <unordered_map>
#include <string>

int main()
{
    std::unordered_multimap<int, std::string> umap;
    umap.insert({ {1,"John"}, {2,"Mary"}, {3,"Bob"}, {4,"Alice"} });

    // 遍历所有元素并输出
    for (const auto& i : umap)
        std::cout << i.first << " : " << i.second << std::endl;

    return 0;
}

程序输出:

1 : John
2 : Mary
3 : Bob
4 : Alice

插入重复元素

由于unordered_multimap容器允许多个元素具有相同键值,因此可以通过从unordered_multimap容器中删除元素,然后重新插入具有相同键值的元素来更新重复元素的值。例如:

#include <iostream>
#include <unordered_map>
#include <string>

int main()
{
    std::unordered_multimap<int, std::string> umap;
    umap.insert(std::make_pair(1, "John"));
    umap.insert(std::make_pair(2, "Mary"));
    umap.insert(std::make_pair(3, "Bob"));
    umap.insert(std::make_pair(4, "Alice"));

    std::cout << "Before updating element:" << std::endl;
    for (const auto& i : umap)
        std::cout << i.first << " : " << i.second << std::endl;

    auto search = umap.find(1);
    if (search != umap.end())
        umap.erase(search);
    umap.insert(std::make_pair(1, "Maria"));

    std::cout << "After updating element:" << std::endl;
    for (const auto& i : umap)
        std::cout << i.first << " : " << i.second << std::endl;

    return 0;
}

程序输出:

Before updating element:
1 : John
2 : Mary
3 : Bob
4 : Alice
After updating element:
1 : Maria
2 : Mary
3 : Bob
4 : Alice

unordered_multimap insert()函数注意事项

  • insert()函数可以在末尾或指定位置插入元素,如果元素已存在,则不会插入原来的元素;如果元素不存在,则会插入该元素。
  • 与unordered_map相比,unordered_multimap容器允许插入具有相同键值的元素,并且不会替换旧元素。
  • 如果插入的元素已经存在于unordered_multimap容器中,则会插入一个新的重复元素并返回插入的迭代器,而不会替换旧元素。因此,可以使用find()函数在容器中搜索指定的元素,并在找到重复元素时更新其值。

结论

在C++ STL中的unordered_multimap容器中,插入元素是非常常见的操作。insert()函数是unordered_multimap容器中用来插入元素的函数。本文介绍了insert()函数的语法、用法和注意事项,包括在末尾插入一个新元素、插入一系列元素和插入重复元素等。unordered_multimap容器允许插入具有相同键值的元素,并且不会替换旧元素,因此在插入元素时需要注意保留重复元素。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程