如何打印地图?并使其成为全局变量? C ++

时间:2013-07-21 20:47:31

标签: c++ variables printing map global

对于Windows 7 64位 所以我设置了我的地图

    map<string, string> database;
    database["user"] = "123";

它是主要功能的一部分,但我如何打印地图的内容?最重要的是它如何变成一个全局变量,以便我可以通过其他函数使用它?我试图将我的打印地图处理放在与制作地图不同的功能中。

4 个答案:

答案 0 :(得分:1)

您可以使用以下代码迭代地图:

for(auto it = database.begin(); it != database.end(); ++it) {
  // it->first is your key
  // it->second is value of particular key
  std::cout << "Key: " << it->first << std::endl;
  std::cout << "Value: " << it->second << std::endl;
  // value can be reached as follows as well
  std::cout << "Value: " << database[it->first] << std::endl;
}

答案 1 :(得分:0)

试试这个:

#include <map>
#include <iostream>

// this will be a global variable
map<string, string> database;

int main()
{

    database["user"] = "123";

    map<string, string>::iterator it;
    for(it = database.begin(); it!= database.end(); it++)
    {
        pair<string, string> p = *it;
        cout << "key=\"" << p.first << "\" value=\"" << p.second << "\"" << endl;
    }

}

答案 2 :(得分:0)

我建议使用C ++ 11功能,例如for_each,基于范围的开始结束 lambda

std::for_each(std::begin(database), std::end(database), 
              [&database](std::pair<std::string, std::string> p) {
    std::cout << "Key : " << p.first << "\tValue : " << p.second << std::endl;
});

其次,我要避免让你的地图成为一个全局变量。有全局定义的原因,但对于容器? (这可能取决于你的项目有多大,但我会说让我们摆脱任何全局变量,如果真的需要把它放在命名空间里)

为什么不将您的地图封装到一个类中并提供改变地图内容的功能,甚至是您的打印设施?如果你想确保你班级的每个用户都有相同的地图内容(翻译这意味着相同的实例),你可以将你的班级变成一个单身。

答案 3 :(得分:0)

如果您有C ++ 1可用(并且作为Stefan答案的旁注:您在C ++ 11中实际上不需要std::for_each或lambdas),可以使用基于范围的迭代来完成迭代: / p>

for ( std::pair<std::string,std::string> const &p : database)
   std::cout << "key=\"" << p.first << "\" value=\"" << p.second << "\"" << std::endl; 

如果您想在其他功能中使用它,请考虑几件事而不是将变量设为全局:

  • 使用类
  • 中的数据库聚合/封装所有函数
  • 将地图对象传递给您的功能