2

我正在尝试迭代下面的地图并用 C++ 打印出所有内容。

struct employee
{
    uint16_t id;
    uint8_t lastModifiedDate[8];
    std::string value;
};

std::map<std::string, employee> m1;

如您所见,上面的地图是键字符串类型,值是员工...

下面是我给出的尝试,但不知何故,每当我编译上面的代码时,我的控制台都会出现一堆异常。我不确定在此处复制粘贴哪个错误是有意义的...所以这就是我不粘贴它的原因现在在这里..如果有人需要它,我可以把它变小然后复制到这里..

std:map<std::string, employee>::const_iterator itMap = m1.begin();

for (;itMap !=m1.end(); ++itMap) {
    std::cout << itMap->first << " : " << itMap->second << std::endl;
}

std::cout << std::endl;

知道我在这里做错了什么吗?

更新:-

这是我看到的错误消息 -

错误:在 std::operator<< >((* & std::operator<< , std::allocator >((* & std::cout), (* & itMap.std::) 中不匹配 operator<< _Rb_tree_const_iterator<_Tp>::operator->, employee> >()->std::pair, employee>::first))), ((const char*)" : ")) << itMap.std::_Rb_tree_const_iterator <_Tp>::operator->, employee> >()->std::pair, employee>::second

4

2 回答 2

2

std::coutemployee在您覆盖类型之前,不会知道如何打印您operator<<的。employee像这样:

std::ostream& operator<<(std::ostream& os, const employee& e)
{
    os << e.id << lastModifiedDate[0] << value;
    rteurn os;
}
于 2013-10-15T10:16:25.710 回答
0

您需要指定employee要输出到的成员cout

std:map<std::string, employee>::const_iterator itMap = m1.begin();

for (;itMap !=m1.end(); ++itMap) {
    std::cout << itMap->first << " : " << itMap->second.value << std::endl;
    //                                                 ^^^^^^
}

std::cout << std::endl;
于 2013-10-15T10:28:22.723 回答