如何打印地图

How to print a map

本文关键字:地图 打印 何打印      更新时间:2023-10-16

我正在尝试以有组织的方式打印地图。我的地图是这样定义的:

map<std::string,std::vector<message *> > data;

其中消息是这样的结构:

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