map:关联容器,和unordered_map相比他是有序的,内部采用红黑树
unordered_map:关联容器,内部采用hash表结构,具有快速检索的功能
特性:
1:可以通过key来快速检索value,主要可以用于处理上位机字符串指令(先分割字符串,然后按照(key,value)存储;
2:无序性,key值排序就是直接按照插入的顺序进行排序;
3:键值唯一;
使用(map和unordered_map使用方法相同):
1:迭代器的使用(遍历元素)
unordered_,map<char, int > Map;
迭代器:unordered_map<char, int >::iterator it; //迭代器作为指针,可以用于遍历,然后取值
it->first; //the key value(of type Key) // or (*it).first;
it->second; //the mapped value(of type T) // or (*it).second;
//eg
for(auto&it:Map)
{
//auto会自动识别迭代类型unordered_map<char, int>::iterator
cout << "Key:" << (*it).first << "value:" << (*it).second << endl;
}
2:插入
//直接插入
Map['a']++; //value为int的时候才能这样使用,如果当前Map不存在‘a’,则自动添加该项,若存在,则计数器++,作用:可以为‘a’进行计数
//单个pair插入
Map.insert(pair<char, int>('b', 1));
//片段插入
unordered_map<char, int> Temp = {{'a', 1}, {'c', 2}, {'d', 3}}; //初始化Map及赋值也可以该方式
Map.insert(Temp.begin(), Temp.end());
3:删除及清空
//通过key删除
Map.erase('a');
//通过迭代器删除
Map.erase(it);
//清空
Map.clear()
if(Map.empty())
{
cout << "已清空" << endl;
}
4:查找
iterator find(const key_type& _Keyval)
//找到:返回元素key的迭代器,再通过迭代器获取value
//未找到:返回unordered_map::end()
eg:
auto it = find('a');
if(it == Map.end())
return false;
else
{
cout << "This value = " <<(*it).second << endl;
}