我有一个像这样的std :: map:
std::map<std::string, std::string> imagePaths;
稍后在我的代码中,我给它一个值,如下:
imagePaths.insert(std::make_pair("Square.bmp", "Square"));
但是,当我循环播放地图并显示第一个和第二个值时,如下所示:
for (auto iterator = imagePaths.begin(); iterator != imagePaths.end(); iterator++)
{
std::cout << "Loaded > " << imagePaths[iterator->first] << " image path : " << imagePaths[iterator->second] << std::endl;
}
我得到了输出:
已加载&gt;方形图像路径:
其余部分由于某种原因是空的,即使我给它的值为"Square.bmp"
。
无法弄清楚我做错了什么。 :/
答案 0 :(得分:3)
您使用错误的方式显示地图内容。
试试这个:
for (auto iterator = imagePaths.begin(); iterator != imagePaths.end(); iterator++)
{
std::cout << "Loaded > " << iterator->first << " image path : " << iterator->second << std::endl;
}
要使用密钥查找值,请使用.find()
方法。在您的情况下,如果您执行此语句:
std::map<std::string, std::string>::const_iterator i = imagePaths.find("Square.bmp");
std::string value = it->second;
值将为“Square”。
答案 1 :(得分:1)
std::map
将对中的第一个元素映射到第二个元素,它不会反过来。
除此之外,在你的循环中应用映射是没有意义的,因为你已经可以通过迭代器访问这两个值。