Kanna_STELLA的垃圾站 2023-03-18 09:48 采纳率: 100%
浏览 51
已结题

用map<string,int>m,通过string映射一个编号,再通过编号来在数组int f[N]中获取一个值为什么会出错?

#用map<string,int>m,通过string映射一个编号,再通过编号来在数组int f[N]中获取一个值为什么会出错?
#题目链接https://blog.csdn.net/qq_46373141/article/details/124276794
#交题链接https://pintia.cn/problem-sets/1635264548121292800/exam/problems/1636695635989049355
#问题代码


```c++
#include <iostream>
#include <string>
#include <map>
using namespace std;
const int MAXN = 100010;
map<string, int> mp;//相关步骤
 int f[MAXN];
int main()
{
    int n, s;
    cin >> n >> s;
    for ( int i = 0; i < n; i ++ ){
        string s1;//相关步骤
        cin >> s1;//
        mp[s1] = i;//
    }
        
    for ( int i = 1; i <= n / s; i ++ )
        for ( int j = 1; j <= s; j ++ )
            cin >> f[i * s - j];//相关步骤
    int k;
    cin >> k;
    string num;//相关步骤
    while ( k -- ) {
        cin >> num;

        if ( f[mp[num]] ) cout << f[mp[num]] << endl;//相关步骤
        else cout << "Wrong Number\n";
    }
    
    return 0;
}

#正确代码


```c++
#include <iostream>
#include <string>
#include <map>
using namespace std;
const int MAXN = 100010;
map<string, int> mp;
string str[MAXN];
 
int main(void)
{
    int n, s;
    cin >> n >> s;
    for ( int i = 0; i < n; i ++ )
        cin >> str[i];
    for ( int i = 1; i <= n / s; i ++ )
        for ( int j = 1; j <= s; j ++ )
            cin >> mp[str[i * s - j]];
    int k;
    cin >> k;
    string num;
    while ( k -- ) {
        cin >> num;
// count是STL库自带的函数,计算容器中值出现的次数
        if ( mp.count(num) ) cout << mp[num] << endl;
        else cout << "Wrong Number\n";
    }
    
    return 0;
}


  • 写回答

9条回答 默认 最新

  • 2301_77093335 2023-03-18 10:35
    关注

    // 我的思路:字符串映射int,再通过int在数组里获得编号,二维数组模拟栈存类型stirng->int->int
    // 题解思路:用string数组维护编号与字符串,再套入map里,一维数组模拟二维数组+模拟栈
    // 我的思路并没有问题,只是由于第一个读入的字符串在map中的值被映射为了0,会被判断不存在。输出Wrong Number
    // 因此只要将判断Worng Number的条件改一下,写成mp.conut(num)即可,这样就可以避免合法元素map映射为0与非法元素混淆的问题

    // 再就是二维数组的问题,看错了题目关键信息,盲盒总量 N(≤10^ 5),范围太大,不能用二维数组。
    // 还有就是本题的数组模拟栈,只要读入时将下标倒转即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月18日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看