即使我分配了一个值,std :: map值为空?

时间:2016-03-10 20:01:58

标签: c++ dictionary stl

我有一个像这样的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"

无法弄清楚我做错了什么。 :/

2 个答案:

答案 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将对中的第一个元素映射到第二个元素,它不会反过来。

除此之外,在你的循环中应用映射是没有意义的,因为你已经可以通过迭代器访问这两个值。