我正在尝试使用map计算重复项,而我正在使用struct的vector。
我在这部分一直有错误:
void display(const std::map<ChildInfo, unsigned int>& counts) {
for (auto count = counts.begin(); count != counts.end(); ++count) {
std::cout << "Value " << count->first << " has count " << count->second << std::endl;
}
}
错误大约是&lt;&lt;操作数,但我不知道如何解决这个问题。
答案 0 :(得分:1)
为operator<<()
结构定义ChildInfo
的重载:
std::ostream& operator<<(std::ostream& str, const ChildInfo& ci) {
str << "id " << ci.id << " gram " << ci.gram << "\n";
return str;
}
当编译器遇到std::cout << count->first
时,会调用operator<<(std::ostream,&, ChildInfo&)
,这就是现在C ++运算符的工作原理。 (确切地说,此代码等同于operator<<(std::cout, count->first)
)但是struct ChildInfo
的所述运算符没有超载。它仅针对基本类型和标准库类型进行了定义,但就后者而言,这是由库开发人员以与上面所示相同的方式完成的。因此,定义它来修复错误。
请参阅Operator overloading以供参考。
也习惯于指定您正在获取的确切错误消息。对于这个问题,程序员或任何工程师必须准确无误,否则它无法正常工作。
答案 1 :(得分:0)
在功能显示中,您希望显示ChildInfo
元素(地图的count->first
元素,但您没有为此类定义运算符&lt;&lt;
一个简单的解决方案是添加类似
的内容ostream& operator << (ostream & os, const ChildInfo& lhs)
{
os << lhs.id;
return os;
}
当然,您可以更改要显示的内容。