码迷,mamicode.com
首页 > 其他好文 > 详细

STL整理--MAP

时间:2020-03-17 23:52:51      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:元素   自动   双向   ons   ase   map   函数返回   数据类型   操作   

转自https://www.cnblogs.com/ivanovcraft/p/9084315.html

Map是什么

Map是从键(key)到值(value)的映射,其内部实现是一棵以key为关键码的红黑树

Map的相关操作

声明:

像这样:

map<key的类型,value的类型>名称;
比如:
map<long long,bool>mp;
map<string,int>mp;
map<pair<int,int>,vector<int>>mp;

就像其他需要排序的数据类型一样,key为一个结构体的map,需要重载小于号

map应该是是自动按key排序来着?

struct pos{
    int x,y,s;
    string move[100];
};
map<pos,int>mp;
bool operator <(const pos &ai,const pos &bi)
{
    return (ai.x==bi.x)?ai.y>bi.y:ai.x>bi.x;
}


[]运算符

map重载了[]运算符,map[key]返回key到value的引用,时间复杂度O(log n)
[]操作符是map最吸引人的地方。我们可以很方便地通过map[key]来得到key对应的value,还可以对map[key]进行赋值操作,改变key对应的value。
若查找的key不存在,则执行map[key]后,map会自动新建一个二元组(key,zero),并返回zero的引用。

eg.
map<string,int>mp;
for(int i=1;i<=n;i++)
{
    string s;
    int num;
    cin>>s>>num;
    mp[s]=num;
}
for(int i=1;i<=m;i++)
{
    string s;
    cin>>s;
    cout<<mp[s]<<endl;
}

map.size()

统计map中元素个数,函数返回一个整形变量,表示map中元素个数,时间复杂度O(1)

用法:名称.size();
eg.
int num=mp.size();

map.empty()

检查map是否为空,返回一个bool型变量,1表示map为空,否则为非空,时间复杂度O(1)

用法:名称.empty();
eg.
if(mp.empty())
    cout<<"Mymap is Empty."<<endl;

map.clear()

清空map,无返回值

用法:名称.clear();
eg.
mp.clear();

map.count(x)

返回map中key为x的元素个数,时间复杂度为O(log n)

用法:名称.count(x)
eg.
if(!mp.count(x))
    mp[x]=1;

迭代器

双向访问迭代器,不支持随机访问,支持星号解除引用,仅支持“++”,“--”这两个算术操作

引用和操作:

map<类型,类型>::iterator it;
eg.
map<int,int>::iterator it=mp.begin();
it++;
it--;

若把it++,则it将会指向“下一个”元素。这里的下一个是指在key从小到大排序的结果中,排在it下一名的元素。同理,若把it--,则it会指向排在上一个的元素
“++”,“--”操作的复杂度均为O(log n)
对map的迭代器解除引用后,将得到一个二元组pair<...,...>
遍历map及访问其中的元素

for(map<int,int>::iterator it=mp.begin();it!=mp.end();it++)
    if(it->second==ans)        //访问二元组中第二个,即value
        cout<<it->first<<endl;        //访问key

map.find(x)

在map中查找key为x的二元组,并返回指向该二元组的迭代器,若不存在,返回map.end(),时间复杂度为O(log n)

用法:名称.find(x);
eg.
if(mp.find(s)!=mp.end())
    cout<<"Have Found!"<<endl;

map.insert(pair<...,...>)

在map中插入,参数是pair<key.type,value.type>,返回插入地址的迭代器和是否插入成功的bool并成的pair,时间复杂度为O(log n)
PS:insert在进行插入的时候是不允许有重复的键值的,如果新插入的键值与原有的键值重复则插入无效

用法:名称.insert(pair<key的类型,value的类型>);
eg.
mp.insert(make_pair(2,3));

map.erase(参数)

删除,参数可以是pair或者迭代器,返回下一个元素的迭代器,时间复杂度为O(log n)

用法:名称.erase(参数);
eg.
map<int,int>::iterator it=mp.begin();
mp.erase(it);
mp.erase(make_pair(2,3));

STL整理--MAP

标签:元素   自动   双向   ons   ase   map   函数返回   数据类型   操作   

原文地址:https://www.cnblogs.com/cherrypill/p/12514420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!