使用map c ++计算重复项

时间:2016-09-23 06:25:18

标签: c++ vector duplicates

我正在尝试使用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;操作数,但我不知道如何解决这个问题。

2 个答案:

答案 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; 
}

当然,您可以更改要显示的内容。