如何打印地图

时间:2016-04-08 09:38:16

标签: c++ dictionary printing cout

我正在尝试以有条理的方式打印地图。我的地图定义如下:

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;

但是在达到该功能时会出现调试错误,我该如何解决呢?

1 个答案:

答案 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的编译器,则必须自己编写迭代器类型。