我正在尝试查找我的字符哈希表是否包含字符串的第一个字符:
string minWindow(string s, string t) {
unordered_map<char, int> charFinder;
for (int i = 0; i < t.length(); ++i) {
charFinder[t[i]] = 0;
}
cout << charFinder.find(s[0]) == charFinder.end() << endl;
return "hi";
}
但由于某种原因我得到了这个错误。这对我来说没有任何意义。有人有什么想法吗?
Line 8: Char 14: error: invalid operands to binary expression ('std::ostream' (aka 'basic_ostream<char>') and 'std::unordered_map<char, int, std::hash<char>, std::equal_to<char>, std::allocator<std::pair<const char, int> > >::iterator' (aka '_Node_iterator<std::pair<const char, int>, __constant_iterators::value, __hash_cached::value>')) cout << charFinder.find(s[1]) == charFinder.end() << endl; ~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~ /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/cstddef:124:5: note: candidate function template not viable: no known conversion from 'std::ostream' (aka 'basic_ostream<char>') to 'std::byte' for 1st argument operator<<(byte __b, _IntegerType __shift) noexcept ^
我切断了长错误消息的其余部分。
这个说法有问题:
cout << charFinder.find(s[0]) == charFinder.end() << endl;
流插入运算符<<
比相等运算符==
具有更高的优先级。
声明与:
((cout << charFinder.find(s[0])) == charFinder.end()) << endl;
std::cout
的重载运算符<<
返回对std::cout
的引用。
当编译器遇到您正在将std::ostream
对象(std::cout
)与std::unordered_map.end()
返回的迭代器
进行比较时,它会发出错误,因为std::ostream
没有重载运算符==
来将自身与迭代器
进行比较。
对于运算符优先级,运算符<<
的优先级高于运算符==
,因此您的COUT
表达式:
cout << charFinder.find(s[0]) == charFinder.end() << endl;
正在被评估,就好像你是这样写的:
(cout << charFinder.find(s[0])) == (charFinder.end() << endl);
编译器错误是抱怨将std::unordered_map
本身传递给运算符<<
,这不是您想要的。更仔细地查看错误消息,这正是它所指出的。对于std::ostream
不存在以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";
}
问题内容: 我有以下代码,出现错误“ PHP致命错误:常量表达式包含无效操作”。当我在构造函数中定义变量时,它可以正常工作。我正在使用Laravel框架。 我已经看到了这个问题:PHP错误:致命错误:常量表达式包含无效的操作,但是我的代码未将任何内容声明为静态,因此无法回答我的问题。 问题答案: 如上所述这里 类成员变量称为“属性”。您可能还会看到使用其他术语(例如“属性”或“字段”)来引用它们,
赋值 计算赋值 多重赋值 范围表达式 and or not 条件操作符 例: 1+2*3/4 为了便于编程,有些方法调用和控制结构是以操作符的形式出现的。Ruby语言中有下列操作符。 高 :: [] +(单项) ! ~ ** -(单项) * / % + - << >>
Blob对象 FileList对象 File对象 FileReader对象 综合实例:显示用户选取的本地图片 URL对象 参考链接 历史上,JavaScript无法处理二进制数据。如果一定要处理的话,只能使用charCodeAt()方法,一个个字节地从文字编码转成二进制数据,还有一种办法是将二进制数据转成Base64编码,再进行处理。这两种方法不仅速度慢,而且容易出错。ECMAScript 5引入
Blob对象 FileList对象 File对象 FileReader对象 综合实例:显示用户选取的本地图片 URL对象 参考链接 历史上,JavaScript无法处理二进制数据。如果一定要处理的话,只能使用charCodeAt()方法,一个个字节地从文字编码转成二进制数据,还有一种办法是将二进制数据转成Base64编码,再进行处理。这两种方法不仅速度慢,而且容易出错。ECMAScript 5引入
问题内容: 我有一个混合二进制数据和文本数据的文件。我想通过正则表达式解析它,但出现此错误: 我猜该消息意味着Python不想解析二进制文件。我正在打开带有标志的文件。 如何在Python中使用正则表达式解析二进制文件? 编辑: 我正在使用Python 3.2.0 问题答案: 我认为您使用Python 3。 1.以 二进制模式 打开文件很简单但是很微妙。与在文本模式下打开它的唯一区别是mode参数
我知道你们会抱怨这个问题被一遍又一遍地问。抱歉,我在Google/Stackoverflow/Forums中没有找到我的答案...等等 我正在用Java创建一个数组二叉树(不是搜索树)。 1) 我的节点具有以下属性:父节点、左节点和右节点。它们是父级、左子级和右子级的索引数。我的教授告诉我这样做,我不知道为什么,因为你可以用公式找到父母和孩子的索引,我希望有人告诉我,添加父母/左/右的索引如何帮助