0

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

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

它是主要功能的一部分,但我怎样才能打印地图的内容呢?最重要的是如何将它变成一个全局变量,以便我可以在其他函数中使用它?我正在尝试将我的打印地图过程置于与地图制作位置不同的功能中。

4

4 回答 4

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;
}
于 2013-07-21T20:54:48.950 回答
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;
    }

}
于 2013-07-21T20:53:31.740 回答
0

我建议使用 C++11 功能,例如 for_each、基于范围的beginend以及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;
});

其次,我会避免使您的地图成为全局变量。全局定义是有原因的,但是对于容器呢?(这可能取决于您的项目有多大,但我想说让我们摆脱任何全局变量,如果确实需要将它放在命名空间中)

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

于 2013-07-21T21:55:04.853 回答
0

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

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

如果您想在其他函数中使用它,请考虑几件事,而不是使变量成为全局变量:

  • 使用类中的数据库聚合/封装所有函数
  • 将地图对象传递给您的函数
于 2013-07-21T22:09:59.003 回答