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 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分