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容器允许插入具有相同键值的元素,并且不会替换旧元素,因此在插入元素时需要注意保留重复元素。