在C ++中迭代包含类对象的映射

时间:2017-07-18 07:34:52

标签: c++ stl

我在C ++中创建一个包含整数键的映射,该值是User类的对象。我可以使用以下代码将对象插入到地图中 -

std::map<std::string,User>::iterator it = usermap.begin();
        usermap.insert (it, std::pair<string,User>(object.userid,object));

我用来在.bin文件中编写对象的代码是 -

map<std::string, User>::iterator it;
for ( it = usermap.begin(); it != usermap.end(); it++ )
{
myfile2 << "Object:" << it->second << "\n";
}

但是当我尝试运行代码时,我得到的错误是 -

在/usr/include/c++/4.8.2/iostream:39:0中包含的文件中,                  来自a3part2_5.cpp:2: /usr/include/c++/4.8.2/ostream:548:5:注意:模板std :: basic_ostream&amp; std :: operator&lt;&lt;(std :: basic_ostream&amp;,const unsigned char *)      operator&lt;&lt;(basic_ostream&amp; __out,const unsigned char * __s)      ^ /usr/include/c++/4.8.2/ostream:548:5:注意:模板参数扣除/替换失败: a3part2_5.cpp:90:31:注意:无法转换'it.std :: _ Rb_tree_iterator&lt; _Tp&gt; :: operator-&gt ;,用户&gt; &gt;() - &gt; std :: pair,User&gt; :: second'(键入'User')输入'const unsigned char *'   myfile2&lt;&lt; “Obejct:”&lt;&lt;它 - &gt;第二&lt;&lt; “\ n” 个

解决错误的任何解决方案?

我的用户类定义为 -

class User 
{ 
public: 
string userid; string uid; string gid; string gecos; string directory; string shell; 
User() {} 
};

2 个答案:

答案 0 :(得分:4)

User是用户定义的类,因此当ostream

时,User无法理解您的myfile2 << "Object:" << it->second << "\n";个对象

这应该有助于Overloading the << Operator for Your Own Classes.

所以你应该为你的班级重载operator <<

答案 1 :(得分:1)

一个例子:

ostream& operator << (ostream &os, User const& u){
    os << "userid:\t" u.userid << "\n";
    // ...
    return os;
}