map:按照特定的顺序存储由key和value值组合而成的元素,元素总是按照key的值排序,容器中没有两个元素具有相同的key值。
map的用法:
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main(){
map<int, string> person;
//赋值
//方法一:key = 0, value = ans0; 如果k值相同,value被覆盖
person[0] = "ans0";
//方法二:如果k值相同,value值不会改变(插不进去)
person.insert(pair<int, string>(1, "ans1"));
person.insert(map<int, string>::value_type(2, "ans2"));
person.insert(map<int, string>::value_type(2, "ans3"));
//读取map的内容
//方法一
map<int, string>::iterator it;
for(it = person.begin(); it != person.end(); it ++)
{
cout << it->first << ":" << it->second << endl;
}
//方法二
for(auto it = person.begin(); it != person.end(); it ++)
{
cout << it->first << ":" << it->second << endl;
}
//方法三
for(auto it : person)
{
cout << it.first << ":" << it.second << endl;
}
//判断数据是否插入成功
pair<map<int, string>::iterator, bool> insert_pair;
insert_pair = person.insert(map<int, string>::value_type(2, "ans3"));
//没有boolalpha输出0,它是一个格式化输出,
cout << "是否插入成功?" << boolalpha << insert_pair.second << endl;
//获得map中的元素
map<int, string>::iterator it1;
it1 = person.find(1);
if(it1 != person.end()) //找到后输出value
{
cout << it1->second << endl;
}
else //没找到
{
cout << "not find" << endl;
}
//删除元素的方法
//方法一
map<int, string>::iterator it2;
it2 = person.find(1);
person.erase(it2);
//方法二:直接通过key的值
person.erase(2);
return 0;
}
map与unordered_mapd的用法与区别:
两者用法一样,只是 内部算法不同
map的优点:
(1)map是有序的 (2)时间复杂度O(n)
map的缺点:空间占用率较高
使用情况:用于有序的情况
unordered_map的优点:查找效率非常高(内部是哈希表实现的)
unordered_map的缺点:哈希表的建立费时
适用情况:查找问题
借鉴于:B站up–刘贝斯