如何打印地图
How to print a map
我正在尝试以有组织的方式打印地图。我的地图是这样定义的:
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的编译器,则必须自己编写迭代器类型。
相关文章:
- 如何使用 std::variant 打印地图键/值?
- 将对象放入地图后打印对象
- 如何打印我在地图中使用的数组?
- 为什么当我尝试打印地图内容时,我得到的是地址而不是 C++ 中的值?
- 通过迭代器打印出地图的值
- 如何打印属于地图的一系列元素(std::p air<size_t,std::string>)(不是所有元素)
- 在向量内打印地图
- 通过地图和打印内容迭代时,倒出输出
- 我想反转地图的值并使用基于范围的 for 循环打印它
- 打印出使用地图实现的Trie中的所有单词
- 为什么在地图中打印第二个元素
- GDB打印std ::地图元素
- 如何从多地图打印
- 如何打印包含集合的地图的内容
- C++ 如何打印此地图 std::map<int, pair<vector<pair<int, int>>, int>>
- 如何在 C++ 中打印通用地图
- 如何在控制台上将三张地图一起打印成三个不同的列?C++
- 如何打印地图的索引
- 地图的内容没有以特定的方式打印出来
- 地图不是在C++中用作数组样式打印吗?