问题: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;
}
};