根据Operator Precedence,operator<< 的优先级高于operator==,因此您的cout 表达式:
cout << charFinder.find(s[0]) == charFinder.end() << endl;
正在评估,就好像你是这样写的:
(cout << charFinder.find(s[0])) == (charFinder.end() << endl);
编译器错误抱怨将std::unordered_map 本身传递给operator<<,这不是您想要的。更仔细地查看错误消息,这正是它所指出的。 std::ostream 没有 operator<< 以 std::unordered_map 作为输入。
要解决这个问题,你需要明确地使用括号来告诉编译器你真正想要什么,例如:
cout << (charFinder.find(s[0]) == charFinder.end()) << endl;
否则,请改用bool 变量:
bool notFound = charFinder.find(s[0]) == charFinder.end();
cout << notFound << endl;
在 C++20 中,您可以使用 std::unordered_map::contains() 代替:
cout << charFinder.contains(s[0]) << endl;
话虽如此,由于您实际上根本没有使用字符数,因此您应该使用std::set 而不是std::unordered_map,例如:
string minWindow(string s, string t) {
set<char> charFinder;
for (int i = 0; i < t.length(); ++i) {
charFinder.insert(t[i]);
}
//
// alternatively:
// set<char> charFinder(t.begin(), t.end());
cout << (charFinder.find(s[0]) == charFinder.end()) << endl;
//
// alternatively:
// bool notFound = charFinder.find(s[0]) == charFinder.end();
// cout << notFound << endl;
//
// alternatively:
// cout << charFinder.contains(s[0]) << endl;
return "hi";
}