映射map

Hello,大家好,我是@菜就多练,输不起就别玩,今天我们来讲映射。

由于近期有事,所以停更了一段时间,请大家谅解。

在 C++ 标准模板库(STL)中,map 是一种关联容器,它存储键值对(key-value pairs),并根据键进行排序(不是按新增顺序)。map 允许高效的键值查找、插入和删除操作。

···


    map<string, int> m1;
    m1["yes"] = 1;
    m1["ok"] = 2;
    for(auto p=m1.begin(); p!=m1.end(); p++) {
        cout << p->first << " : " << p->second << ";" <<endl;
    }
  
    cout << "第一个键值是:" << m1.begin()->first << endl;
    cout << "第一个键值对应的映射值是:" << m1.begin()->second << endl;

···

判断某键值是否存在

find() 方法接受一个键作为参数,并返回一个迭代器(或常量迭代器,如果 map 是常量的话)。如果找到了具有给定键的元素,返回的迭代器将指向该元素;如果没有找到,返回的迭代器将等于 map 的 end() 迭代器。

删除元素和清空映射表

  • 可以使用 erase 方法删除一个元素
  • 使用 clear 方法删除全部元素
#include <iostream>
#include <map>
int main() {
    map<string, int> myMap = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 35}};

    // 删除键为 "Bob" 的元素
    myMap.erase("Bob");

    // 检查是否删除成功
    if (myMap.find("Bob") == myMap.end()) {
        cout << "Bob is removed." << endl;
    }
  
    myMap.clear();

    return 0;
}

接下来,我们来看一道 历年真题

#A. C07.L07.STL之映射.应用1.查字典

小明正在复习全国英语四级考试,他手里有一本词典,现在有很多单词要查。请编写程序帮助他快速找到要查的单词所在的页码。

输入格式

  1. 第 1 行 1 个正整数 N,N<=10,000,表示字典中一共有多少个单词。
  2. 接下来每两行表示一个单词,其中:
    • 第 1 行是一个长度小于或等于 100 的字符串,表示这个单词,全部小写字母,单词不会重复。
    • 第 2 行是 1 个整数,表示这个单词在字典中的页码。
    • 接下来一行是 1 个整数 M ,M <= 10,000,表示要查的单词数。
    • 接下来的M行,每行一个字符串,表示要查的单词,保证在字典中存在

输出格式

M 行,每行一个正整数,表示第 i 个单词在字典中的页码。

样例

输入数据 1

2
scan
10
word
15
2
scan
word

Copy

输出数据 1

10
15

接下来,我们来看他的正确代码。

#include<bits/stdc++.h>
using namespace std;
//unsigned long long ;
map<string,int >dsnv;
int n,m;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        string s;
        int a;
        cin>>s>>a;
        dsnv[s]=a;
    }
    cin>>m;
    for(int i=1;i<=m;i++){
        string b;
        cin>>b;
        cout<<dsnv[b]<<endl;
    }
    return 0;
}

是不是一点都看不懂呢

其实,这就是映射。

这是五年级常考类型。

这是最简单的

我们来看一下难亿点的

//菜就多练,输不起,就别玩
//以前是以前,现在是现在
//不要总拿以前当现在
#include<bits/stdc++.h>
using namespace std;
//unsigned long long ;
int n;
map<int,int>dc;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        int a;
        cin>>a;
        dc[a]++;
    }
    map<int,int>::iterator it;
    for(it=dc.begin();it!=dc.end();it++){
        cout<<it->first<<" "<<it->second<<endl;
    }
    return 0;
}

 是不是很无语呢

好了,今天的分享就到这里了,我们下期不见不散,拜拜;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值