概念总结:
- map的用法和Python中字典的用法是类似的。
- Map是关联容器,按照特定的顺序存储由key和value值组合而成的元素。
- key:常用于对元素进行排序和唯一标识
- 自动建立key-value的对应。key和value可以是任意需要的类型
- 容器中没有两个元素具有相同的key
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main()
{
map<int, string> person; // 创建一个map对象
// 赋值操作1: key = 0 ; value = lewis01,以该方式插入如果键值重复则新值覆盖旧值
person[0] = "lewis0";
person[0] = "lewis10";
// 以下面的方式插入,如果键值重复则插不进去
person.insert(pair<int, string>(1, "lewis1"));
person.insert(map<int, string>::value_type(2, "lewis2"));
person.insert(map<int, string>::value_type(2, "lewis3"));
// 读取map中的内容
map<int, string>::iterator it;
for (it = person.begin(); it != person.end(); it++)
{
cout << it->first << ":" << it->second << endl;
}
// 查找元素
map<int, string>::iterator it1;
it1 = person.find(6); // 寻找key为6的键值对
if (it1 != person.end()) // 如果没有找到则返回person.end()
{
cout << it1->second << endl;
}
else
{
cout << "not found" << endl;
}
// 删除元素方法1:利用跌倒器
map<int, string>::iterator it2;
it2 = person.find(1);
person.erase(it2);
// 删除元素方法1:利用键值
person.erase(2);
map<int, string>::iterator it3;
for (it3 = person.begin(); it3 != person.end(); it3++)
{
cout << it3->first << ":" << it3->second << endl;
}
cout << "------------------------------------" << endl;
// key和value都用string
map<string, string> person2;
// 增
person2["0"] = "nihoa0";
person2["1"] = "nihoa1";
person2["2"] = "nihoa2";
person2["3"] = "nihoa3";
person2["4"] = "nihoa4";
person2.insert(pair<string, string>("5", "nihoa5"));
person2.insert(map<string, string>::value_type("6", "nihoa6"));
person2.insert(map<string, string>::value_type("6", "nihoa7"));
// 删
map<string, string>::iterator it5;
it5 = person2.find("3");
if (it5 != person2.end())
{
person2.erase(it5);
}
person2.erase("2");
// 改
person2["1"] = "Hello";
map<string, string>::iterator it4;
for (it4 = person2.begin(); it4 != person2.end(); it4++)
{
cout << it4->first << ":" << it4->second << endl;
}
// 查
map<string, string>::iterator it6;
it6 = person2.find("5");
if (it6 != person2.end())
{
cout << it6->second << endl;
}
}
map与multiamp的用法和区别:
- map只允许Key与value一一对应
- multiple中的一个key可以对应多个value
map与unordered_map的用法和区别
map的优点:
- map是有序的(根据key值排序)
- 基于红黑树实现,查找的时间复杂度是O(n)
map的缺点:
- 空间占有率比较高:因为内部实现了红黑树,虽然提高了运行效率,但是每个节点都要保存父亲节点和孩子节点和红黑树的性质,使得每一个节点都占用大量的空间。
unordered_map优点:
- 内部是用哈希表来实现的,所以查找效率非常高
unordered_map缺点:
- 哈希表的建立比较费时
适用情况
- 对于要有序的结构使用map比较好
- 对于查找问题,使用unordered_map比较好