📅  最后修改于: 2023-12-03 14:39:52.107000             🧑  作者: Mango
C++ STL中的multimap是一种关联式容器,它在内部以红黑树(一种自平衡二叉查找树)的形式存储元素,因此它的查找、插入和删除操作的时间复杂度都是O(log n)。
multimap允许我们存储多个值与同一键相关联的情况。我们可以使用multimap的insert()函数向容器中插入元素,使用find()函数查找与给定键相关联的所有值。
使用multimap的insert()函数,可以向容器中插入元素。insert()函数接受一个pair类型的参数,其中的第一个元素表示要插入的键,第二个元素表示要插入的值。如果与该键相关联的值已经存在,则这个新值将被插入到已存在的值的后面。
#include <iostream>
#include <map>
int main() {
std::multimap<int, int> mp;
mp.insert(std::pair<int, int>(1, 1));
mp.insert(std::make_pair(1, 2));
mp.insert(std::make_pair(2, 3));
mp.insert(std::make_pair(2, 4));
return 0;
}
在上面的示例中,我们创建了一个multimap容器,并向其中插入了四个键值对。第一个和第二个键都与值“1”相关联,第三个和第四个键都与值“2”相关联。可以注意到,如果键已经存在,则新值将被插入到旧值的后面。
使用multimap的find()函数,可以查找与给定键相关联的所有值。该函数接受一个键作为参数,并返回一个指向multimap中第一个与该键匹配的值的迭代器。如果该键不存在于multimap中,则返回multimap的end()迭代器。
#include <iostream>
#include <map>
int main() {
std::multimap<int, int> mp;
mp.insert(std::make_pair(1, 1));
mp.insert(std::make_pair(1, 2));
mp.insert(std::make_pair(2, 3));
mp.insert(std::make_pair(2, 4));
auto range = mp.equal_range(2); // 查找键值为2的所有值
for (auto it = range.first; it != range.second; ++it) {
std::cout << "键值为2的值为:" << it->second << std::endl;
}
return 0;
}
在上面的示例中,我们首先向multimap中插入了四个键值对。然后,使用mp.equal_range(2) 查找键为2的所有值,返回值为一个pair类型的迭代器范围,其中第一个迭代器指向第一个与该键匹配的值,第二个迭代器指向该键的最后一个值的下一个位置。我们在循环中遍历该范围,并输出每个键值对的值,以此来查找与给定键相关联的所有值。