使用Unordered_map c ++的字符串中的第一个唯一字符
Posted
技术标签:
【中文标题】使用Unordered_map c ++的字符串中的第一个唯一字符【英文标题】:First unique character in string using Unordered_map c++ 【发布时间】:2016-09-21 06:59:18 【问题描述】:我正在尝试使用 c++ 中的 unordered_map 查找字符串的第一个唯一字符。 LeetCodeProblem我的代码:
int firstUniqChar(string s)
unordered_map<char,int> m;
for(int i=0;i<s.length();i++)
m[s[i]]++;
unordered_map<char,int>::iterator mit;
for(mit=m.begin();mit!=m.end();mit++)
if(mit->second ==1)
for(int i=0;i<s.length();i++)
if(mit->first == s[i])
return i;
return -1;
输出不正确。 如果我尝试在 Eclipse 中调试它,它会说无法解析 unordered_map。我在我的代码中找不到错误。请帮助我理解错误。
【问题讨论】:
如果下面发布的答案确实回答了您的问题,请接受。在这里阅读更多:What should I do when someone answers my question? 【参考方案1】:unordered_map
不能确保元素按照您插入的顺序存储。因此,当您对其进行迭代时,不能保证 second
为 1 的第一个元素一定是第一个唯一字符。
您应该迭代字符串:
int firstUniqChar(string s)
unordered_map<char,int> m;
for(int i=0;i<s.length();i++)
m[s[i]]++;
for (int i = 0; i < s.length(); i++)
if (m[s[i]] == 1)
return i;
return -1;
【讨论】:
哦..我不知道这个。谢谢。但是元素的存储顺序是什么? @rowang 未指定。取决于哈希函数、桶的数量(随时间变化)、哈希值如何映射到桶等。 通过this更好地理解。 谢谢大家。明白了。以上是关于使用Unordered_map c ++的字符串中的第一个唯一字符的主要内容,如果未能解决你的问题,请参考以下文章
在 C++ unordered_map 中有效地使用 [] 运算符
C++17 中 std::unordered_map 的推导指南