胖河马哦 2022-09-14 12:04 采纳率: 0%
浏览 13

C++ unordered_map关于插入数据后内部顺序的问题

问题:C++ unordered_map关于插入数据后内部顺序的问题

问题来源https://leetcode.cn/problems/first-unique-character-in-a-string/

问题描述

对于此题我是这么想的C++的unordered_map 既然是无序的,就内部的排列顺序就纯粹地跟我insert的顺序有关。那我创建unordered_map<char, int> m用来存<ch, pos>。
然后遍历字符串s,如果s[i]没有在m里,则把s[i]与其位置加入m;如果找到了,就把他的value改成一个较大的数字L(此处取字符串长度size)。
完成遍历字符串s之后,m里最后一个value不等于size的位置的value就是我们第一次出现不重复字符的位置。但是实际情况是卡在第104个用例"tuvwxyzabcdefghijklmnopqrs" 通过调试 发现m对字符的存储顺序是 "srqponmlkjihgtuvwxyzabcdef" 黑体中的部分和我预想的反着的顺序不同,其余相同。
测试了一下任意的一个长度大于13的字符串输入此题,再按顺序输出m的key值。其13位后的子串会翻转后放到前面,而前13位会不反转直接放到后面(描述比较不严谨);而小于13位的输入,则是整个都反着存进去的。
请问一下这是unordered_map的什么机制么,类似扩容么。

class Solution {
public:
    int firstUniqChar(string s) {
        unordered_map<char, int> m;
        int size = s.size();
        for (int i=0; i<size; i++)
        {
            char ch = s[i];
            auto it = m.find(ch);
            if(it == m.end()){
                m[ch] = i;
            }else{
                it->second = size;
            }
        }
        int res = -1;
        for (auto it : m)
        {
            if(it.second != size){
                res = it.second;
            }
        }
        return res;
    }
};
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-14 13:13
    关注
    评论

报告相同问题?

问题事件

  • 修改了问题 9月14日
  • 修改了问题 9月14日
  • 创建了问题 9月14日

悬赏问题

  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图
  • ¥15 关于#DMA固件#的问题,请各位专家解答!
  • ¥15 matlab生成的x1图不趋于稳定,之后的图像是稳定的水平线
  • ¥15 请问华为OD岗位的内部职业发展通道都有哪些,以及各个级别晋升的要求
  • ¥20 微信小程序 canvas 问题
  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验