c ++ STL unordered_map错误,使用方法“ find”时参数类型无效

问题描述 投票:0回答:3

我是一名刚接触C ++的学生,目前我陷入了这个问题。

#include <unordered_map>
#include <string>
#include <iostream>

using namespace std;

int lengthOfLongestSubstring(string s) {
    unordered_map<char,int> um;
    int i = 0;
    for (; i < s.size(); i++)
    {
        if(!um.find(s.at(i))) {
            um.insert(make_pair(s[i],i));
        } else {
            break;
        }
    }
    return i;
}

int main() {
    cout << lengthOfLongestSubstring("bbbbb") <<endl; // should return 1
    cout << lengthOfLongestSubstring("abcabcbb") << endl; // should return 3
    cout << lengthOfLongestSubstring("pwwkew") << endl; // should return 3
}

虽然进行编码,但在条件检查um.find(s.at(i))]中不断收到错误消息,>我不能退出的问题得到掌握。

有人能告诉我一个好的解决方案吗?+有没有更好的方法可以更有效地编码此问题?

非常感谢!

我是一位刚接触C ++的学生,目前我陷入了这个问题。 #include #include #include 使用命名空间std; int ...

c++
3个回答
1
投票
 if(!um.find(s.at(i))) {

[find()返回一个迭代器,而不是布尔值,并且迭代器不可转换为bool


0
投票

成员函数find返回为其操作符!未定义。


0
投票

find()返回一个迭代器,该迭代器不能转换为bool,因此不能像if (!um.find(s.at(i)))那样使用它。对于documentation,如果在地图中找不到该元素,则find()返回end()。因此,您需要这样做:

if(um.find(s.at(i)) == um.end()) {
    um.insert(make_pair(s[i],i));
} else {
    break;
}

0
投票

来自cplusplus.com

std :: string :: at

© www.soinside.com 2019 - 2024. All rights reserved.