✨博客主页 | ||
---|---|---|
何曾参静谧的博客 | ||
📌文章专栏 | ||
「C/C++」C/C++程序设计 | ||
📚全部专栏 | ||
「VS」Visual Studio | 「C/C++」C/C++程序设计 | 「UG/NX」BlockUI集合 |
「Win」Windows程序设计 | 「DSA」数据结构与算法 | 「UG/NX」NX二次开发 |
「QT」QT5程序设计 | 「File」数据文件格式 | 「PK」Parasolid函数说明 |
目录
- std::multimap容器详解
- 1. 引用头文件
- 2. 注意事项
- 3. 函数构造与对象初始化
- 4. 元素访问
- 5. 迭代器
- 6. 容器
- 7. 修改器
- 8. 元素比较
- 代码示例
- 总结与应用场景
std::multimap容器详解
1. 引用头文件
在C++中,std::multimap是标准模板库(STL)中的一个关联容器,它存储键值对(key-value pairs),并且允许键的重复。要使用std::multimap,首先需要包含相应的头文件:
#include <map>
2. 注意事项
- 有序性:
std::multimap
是一个有序集合容器,它根据元素的键值自动进行排序。 - 重复元素:与std::map不同,
std::multimap
允许存储重复的元素。 - 空间消耗:由于
std::multimap
使用红黑树作为内部数据结构,相对于其他简单的数据结构(如数组或链表),其空间消耗可能会稍高一些。 - 查找与删除:由于允许键的重复,在进行查找和删除操作时,需要注意可能会有多个元素匹配同一个键。
3. 函数构造与对象初始化
std::multimap类模板提供了多个构造函数,用于创建和初始化multimap对象。
// 默认构造函数:创建一个空的multimap容器。
std::multimap<int, std::string> mmap;
// 初始化列表:在创建multimap的同时进行初始化。
std::multimap<int, std::string> mmap{{1, "one"}, {2, "two"}, {1, "uno"}};
// 拷贝构造函数:通过已有的multimap对象来初始化新的multimap对象。
std::multimap<int, std::string> mmap2(mmap);
// 自定义排序:通过提供自定义的比较函数来修改multimap内部的排序规则。
std::multimap<int, std::string, std::greater<int>> mmap3{{1, "one"}, {2, "two"}};
4. 元素访问
std::multimap提供了多种方式来访问其元素,包括迭代器、范围for循环等。
5. 迭代器
std::multimap的迭代器提供了对容器中元素的顺序访问。迭代器类型包括正向迭代器和逆向迭代器。
- 正向迭代器:
auto it = mmap.begin();
while (it != mmap.end()) {
// 访问元素
++it;
}
- 逆向迭代器:
auto rit = mmap.rbegin();
while (rit != mmap.rend()) {
// 访问元素
++rit;
}
- for循环迭代器:
for (auto it = mmap.begin(); it != mmap.end(); ++it) {
std::cout << it->first << " " << it->second << std::endl;
}
6. 容器
std::multimap作为关联容器,具有一些特定的成员函数来管理其容量和状态。
- size():返回容器中元素的个数。
std::cout << mmap.size() << std::endl;
- empty():如果multimap为空,则返回true。
if (mmap.empty()) {
std::cout << "Multimap is empty" << std::endl;
}
- max_size():返回容器可以容纳的最大元素个数。
std::cout << mmap.max_size() << std::endl;
7. 修改器
std::multimap提供了多种成员函数来插入、删除和修改元素。
- insert():插入元素。
mmap.insert({3, "three"});
- erase():删除元素。
mmap.erase(1); // 删除所有键为1的元素
- swap():交换两个multimap的内容。
std::multimap<int, std::string> mmap2;
mmap.swap(mmap2);
8. 元素比较
std::multimap使用比较函数来确定元素的顺序和等价性。默认情况下,使用std::less进行升序排序。
- key_comp():返回用于比较键的函数。
auto comp = mmap.key_comp();
- value_comp():返回用于比较元素值的函数。
auto val_comp = mmap.value_comp();
代码示例
以下是一个完整的代码示例,展示了如何创建、初始化和操作std::multimap对象。
#include <iostream>
#include <map>
#include <string>
int main() {
// 创建并初始化multimap对象
std::multimap<int, std::string> mmap{{1, "one"}, {2, "two"}, {1, "uno"}};
// 插入元素
mmap.insert({3, "three"});
// 访问元素
for (auto& elem : mmap) {
std::cout << elem.first << " " << elem.second << std::endl;
}
// 删除元素
mmap.erase(1);
// 再次访问元素
std::cout << "After erasing key 1:" << std::endl;
for (auto& elem : mmap) {
std::cout << elem.first << " " << elem.second << std::endl;
}
return 0;
}
总结与应用场景
std::multimap是一个有序的关联容器,它允许存储具有相同键的多个元素。其内部实现通常基于红黑树,保证了元素按照键的顺序进行存储和检索。std::multimap在需要存储键值对且允许键重复的场景下非常有用,例如:
- 电话簿:相同的人可以有两个以上电话号码。
- 文件系统:可以将多个符号链接映射到相同的物理文件。
- DNS服务器:可以将几个URL映射到相同的IP地址。
通过std::multimap,可以高效地管理这些具有重复键的数据,实现快速的查找、插入和删除操作。