如何打印地图
How to print a map
我正在尝试以有条理的方式打印地图。我的地图是这样定义的:
map<std::string,std::vector<message *> > data;
其中 message 是这样的结构:
struct message{
static unsigned int last_id;
unsigned int id;
std::string msg;
std::string timestamp;
message(const std::string& recvbuf_msg,const std::string& a_timestamp) :
msg(recvbuf_msg), timestamp(a_timestamp), id(++last_id)
{
}
};
我试过这种打印方式:
std::cout << (data[username]).at(0)->msg << std::endl;
但是在执行该函数时出现调试错误,我该如何解决?
错误 R6010 - abort() has been called
表示映射中没有关键字 username
的条目,或者该用户的消息向量为空。在访问元素之前,您需要确保容器是非空的。使用迭代器是个好主意,下面是一个如何打印所有用户名消息的示例:
for(auto mapIt = data.cbegin(); mapIt != data.cend(); ++mapIt)
{
std::cout << "printing data for " << mapIt->first << ":" << std::endl;
for(auto vectIter = mapIt->second.cbegin(); vectIter != mapIt->second.cend(); ++vectIter)
{
std::cout << (*vectIter)->msg << ", " << (*vectIter)->timestamp << ", "
<< (*vectIter)->id << std::endl;
}
}
代码使用 auto
,因此如果您没有使用 C++11 兼容的编译器,则必须自己编写迭代器类型。
我正在尝试以有条理的方式打印地图。我的地图是这样定义的:
map<std::string,std::vector<message *> > data;
其中 message 是这样的结构:
struct message{
static unsigned int last_id;
unsigned int id;
std::string msg;
std::string timestamp;
message(const std::string& recvbuf_msg,const std::string& a_timestamp) :
msg(recvbuf_msg), timestamp(a_timestamp), id(++last_id)
{
}
};
我试过这种打印方式:
std::cout << (data[username]).at(0)->msg << std::endl;
但是在执行该函数时出现调试错误,我该如何解决?
错误 R6010 - abort() has been called
表示映射中没有关键字 username
的条目,或者该用户的消息向量为空。在访问元素之前,您需要确保容器是非空的。使用迭代器是个好主意,下面是一个如何打印所有用户名消息的示例:
for(auto mapIt = data.cbegin(); mapIt != data.cend(); ++mapIt)
{
std::cout << "printing data for " << mapIt->first << ":" << std::endl;
for(auto vectIter = mapIt->second.cbegin(); vectIter != mapIt->second.cend(); ++vectIter)
{
std::cout << (*vectIter)->msg << ", " << (*vectIter)->timestamp << ", "
<< (*vectIter)->id << std::endl;
}
}
代码使用 auto
,因此如果您没有使用 C++11 兼容的编译器,则必须自己编写迭代器类型。