我正在尝试以有条理的方式打印地图。我的地图定义如下:
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;
但是在达到该功能时会出现调试错误,我该如何解决呢?
答案 0 :(得分:1)
错误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
代码使用{{1}},因此如果您不使用符合C ++ 11的编译器,则必须自己编写迭代器类型。