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

标签 c++ stl

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

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& std::operator<<(std::basic_ostream&, const unsigned char*) 运算符<<(basic_ostream& __out, const unsigned char* __s) ^ /usr/include/c++/4.8.2/ostream:548:5: 注意:模板参数推导/替换失败: a3part2_5.cpp:90:31: 注意:无法转换 'it.std::_Rb_tree_iterator<_Tp>::operator->, User>>()->std::pair, User>::second'(类型 'User ') 输入'const unsigned char*' myfile2 << "Obejct: "<< it->second << "\n";

有解决错误的方法吗?

我的用户类定义为 -

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

最佳答案

User是用户定义的类,因此 ostream无法理解你的User当你做的时候对象 myfile2 << "Object:" << it->second << "\n";

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

所以你应该重载operator <<为你的类(class)。

关于c++ - 在 C++ 中迭代包含类对象的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45160361/

相关文章:

c++ - Rapidjson 位翻转

c++ - 如何使用 C++ STL 删除集合中从开始到迭代器之前的一个元素的元素?

c++ - std::equal_range 的可能实现

c++ - 如何在一个 JsonArray 中添加多个 json 字符串?

c++ - 指向数组参数的双指针错误

c# - 如何将 DLL 访问代码从 C++ 移植到 C#

debugging - 如何使用 cygwin 工具链在 NetBeans 8.1 调试器中观看 C++ STL 集合?

c++ - 完美柱方程 C++

c++ - 在 Linux 上用 C++ 实现线程安全的通用堆栈

c++ - 使用 STL 与自定义实用程序类的程序员生产力