赞
踩
multimap 容器 中 可以 存储 多个具有 相同 键 Key 的 键值对 pair 对组元素 ;
其 键 Key 是不是唯一的 , 多个相同的 键 排序时 先后排列在一起 ;
multimap 容器中的元素会 自动排序 , 默认情况下 , 使用 less 仿函数 排序规则 对 键 Key 进行比较排序 , 也可以自定义排序规则 ;
容器示例 : 下面的 multimap 集合中 , 存储了两个 键 是 2 的 键值对 , 分别是 (2, “Red”) 和 (2, “Cyan”) ;
multimap<int, string> myMap;
myMap.insert(make_pair(1, "Blue"));
myMap.insert(make_pair(2, "Red"));
myMap.insert(make_pair(2, "Cyan"));
multimap 容器 与 map 容器的 主要区别是 :
multimap 容器中的 键 Key 不需要是唯一的 , 在容器中可以有多个 相同的 键 ;
也可以理解为 multimap 的 一个 键 Key 可以对应多个 值 Value ;
代码示例 :
#include "iostream" using namespace std; #include "map" int main() { multimap<int, string> myMap; // 插入元素 myMap.insert(make_pair(1, "Blue")); myMap.insert(make_pair(2, "Red")); myMap.insert(make_pair(2, "Cyan")); myMap.insert(make_pair(4, "Green")); myMap.insert(make_pair(5, "Black")); //容器的遍历 cout << "遍历容器 :" << endl; for (multimap<int, string>::iterator it = myMap.begin(); it != myMap.end(); it++) { cout << it->first << "\t" << it->second << endl; } cout << "遍历结束" << endl; // 控制台暂停 , 按任意键继续向后执行 system("pause"); return 0; };
执行结果 :
遍历容器 :
1 Blue
2 Red
2 Cyan
4 Green
5 Black
遍历结束
Press any key to continue . . .
multimap 容器插入元素 只能使用 insert 函数插入 , 不能使用 数组下标 方式 插入元素 ;
使用下面的 insert 函数插入元素 , 可以插入 键值相同 的元素 ;
// 插入单个元素,使用 pair 类型
iterator insert(const value_type& value);
代码示例 :
multimap<int, string> myMap;
// 插入元素
myMap.insert(make_pair(1, "Blue"));
myMap.insert(make_pair(2, "Red"));
myMap.insert(make_pair(2, "Cyan"));
调用 multimap 的 clear 函数 , 可以 删除所有的元素 ;
// 清空 multimap,删除所有元素
void clear();
调用 multimap 的 erase 函数 , 可以删除指定 键值 / 指定迭代器位置 / 指定迭代器范围 的 元素 ;
size_type erase(const key_type& key);
iterator erase(const_iterator position);
iterator erase(const_iterator first, const_iterator last);
由于 std::multimap 关联容器 中 的 键 Key 不是唯一的 , 不能直接 通过成员函数 修改已有 键值对 元素 , 不能直接通过 键 Key 来定位并修改一个特定的元素 ;
如果想要修改 键 Key 对应的 某一个 值 Value , 只能 先找到这个 键 对应的 多个值 , 然后逐个通过 迭代器 遍历该寻找要修改的值 ;
通过 find 函数 或者 equal_range 函数 , 获取对应的迭代器 ,
// 修改 4 对应的值 Green 为 Purple
auto it = myMap.find(4);
if (it != myMap.end()) {
// 修改找到的元素的值
it->second = "Purple";
}
// 修改 2 对应的值 Cyan 为 Orange
pair<multimap<int, string>::iterator, multimap<int, string>::iterator> range = myMap.equal_range(2);
//auto range = myMap.equal_range(2);
for (auto it = range.first; it != range.second; ++it) {
// 找到 Cyan 值并修改为 Orange
if (it->second == "Cyan") {
it->second = "Orange";
}
}
代码示例 :
#include "iostream" using namespace std; #include "map" void printMM(multimap<int, string>& myMap) { //容器的遍历 cout << "遍历容器 :" << endl; for (multimap<int, string>::iterator it = myMap.begin(); it != myMap.end(); it++) { cout << it->first << "\t" << it->second << endl; } cout << "遍历结束" << endl; } int main() { multimap<int, string> myMap; // 插入元素 myMap.insert(make_pair(1, "Blue")); myMap.insert(make_pair(2, "Red")); myMap.insert(make_pair(2, "Cyan")); myMap.insert(make_pair(4, "Green")); myMap.insert(make_pair(5, "Black")); // 打印 multimap printMM(myMap); // 修改 4 对应的值 Green 为 Purple auto it = myMap.find(4); if (it != myMap.end()) { // 修改找到的元素的值 it->second = "Purple"; } // 修改 2 对应的值 Cyan 为 Orange pair<multimap<int, string>::iterator, multimap<int, string>::iterator> range = myMap.equal_range(2); //auto range = myMap.equal_range(2); for (auto it = range.first; it != range.second; ++it) { // 找到 Cyan 值并修改为 Orange if (it->second == "Cyan") { it->second = "Orange"; } } // 打印 multimap printMM(myMap); // 删除 2 元素 键 的 键值对 myMap.erase(2); // 打印 multimap printMM(myMap); // 清空容器 myMap.clear(); // 打印 multimap printMM(myMap); // 控制台暂停 , 按任意键继续向后执行 system("pause"); return 0; };
执行结果 :
遍历容器 : 1 Blue 2 Red 2 Cyan 4 Green 5 Black 遍历结束 遍历容器 : 1 Blue 2 Red 2 Orange 4 Purple 5 Black 遍历结束 遍历容器 : 1 Blue 4 Purple 5 Black 遍历结束 遍历容器 : 遍历结束 请按任意键继续. . .
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。