0
点赞
收藏
分享

微信扫一扫

STL之map

快乐小码农 2022-03-11 阅读 49
c++

头文件 #include<map>

using namespace std;

map,翻译为映射,映射的意思很简单,例如一本书,翻看目录,找到了所需知识的位置,然后,找到具体的知识;例如数组,字符数组就是建立了int 与 char之间的映射,double类型的数组就是建立了int 与double之间的映射,而map可以建立任何基本类型之间的映射(包括STL容器)

例如,map可以建立string 与 int之间的映射;

1.map的定义

map<typename1,typename2> ans;

typename1,相当于目录(键key)

typename2,相当于具体的知识(值value);

如果想要是字符串到整型的映射,字符串就必须使用string,而不能使用char数组

map<string,int> ans;

2.map容器内元素的访问

(1)通过下标访问

和访问普通数组一样,看代码

#include<iostream>
#include<map>

using namespace std;

int main()
{
    map<char,int> ans;
    ans['c']=20;
    ans['c']=30;//20被覆盖;
    cout<<ans['c'];
    return 0;
}

输出结果

30

(2)通过迭代器访问

迭代器定义

map<typename1,typename2>::iterator bns;

示例:

map<char,int>::iterator bns;

map可以通过使用bns->first访问typename1,

bns->second访问typename2;

#include<iostream>

#include<map>

using namespace std;

int main()
{
    map<char,int> ans;

    ans['a']=20;
    ans['b']=30;
    ans['c']=40;
    for(map<char,int>::iterator bns=ans.begin();bns!=ans.end();bns++)
    {
        cout<<bns->first<<"  "<<bns->second<<endl;
    }
    return 0;
}

输出结果

a  20
b  30
c  40

map会以typename1的大小为排序标准自动排序

a<b<c

那么就会先输出a映射的值;然后依次输出;

3.map常用函数

(1)find()

find(key)返回键为key的映射的迭代器

#include<iostream>

#include<map>

using namespace std;

int main()
{
    map<char,int> ans;

    ans['a']=20;
    ans['b']=30;
    ans['c']=40;
   map<char,int>::iterator bns=ans.find('b');

    cout<<bns->first<<" "<<bns->second<<endl;

    return 0;
}

输出结果

b 30

(2)erase()

①删除单个元素

方法一

ans.erase(bns)

bns为所需要删除元素的迭代器

#include<iostream>

#include<map>

using namespace std;

int main()
{
    map<char,int> ans;

    ans['a']=20;
    ans['b']=30;
    ans['c']=40;
    map<char,int>::iterator bns=ans.find('b');
    ans.erase(bns);
    for(map<char,int>::iterator bns=ans.begin();bns!=ans.end();bns++)
        cout<<bns->first<<" "<<bns->second<<endl;

    return 0;
}

输出结果

a 20
c 40

方法二

#include<iostream>

#include<map>

using namespace std;

int main()
{
    map<char,int> ans;

    ans['a']=20;
    ans['b']=30;
    ans['c']=40;
    ans.erase('b');
    for(map<char,int>::iterator bns=ans.begin();bns!=ans.end();bns++)
        cout<<bns->first<<" "<<bns->second<<endl;

    return 0;
}

输出结果

a 20
c 40

②删除一个区间

ans.erase(first,last)

first为起始迭代器,last为末尾迭代器的下一个地址,也就是一个左闭右开的区间[first,last)

#include<iostream>

#include<map>

using namespace std;

int main()
{
    map<char,int> ans;

    ans['a']=20;
    ans['b']=30;
    ans['c']=40;
    map<char,int>::iterator bns=ans.find('b');
    ans.erase(bns,ans.end());
    for(map<char,int>::iterator bns=ans.begin();bns!=ans.end();bns++)
        cout<<bns->first<<" "<<bns->second<<endl;

    return 0;
}

输出结果

a 20

(3)size()

ans.size()返回映射的对数

#include<iostream>

#include<map>

using namespace std;

int main()
{
    map<char,int> ans;

    ans['a']=20;
    ans['b']=30;
    ans['c']=40;
    cout<<ans.size()<<endl;
    return 0;
}

输出结果

3

(4)clear()

清空map中所有映射的对数

#include<iostream>

#include<map>

using namespace std;

int main()
{
    map<char,int> ans;

    ans['a']=20;
    ans['b']=30;
    ans['c']=40;
    ans.clear();
    cout<<ans.size()<<endl;
    return 0;
}

输出结果

0

感谢大家的时间!

举报

相关推荐

0 条评论