对于 Windows 7 64-bit 所以我设置了我的地图
map<string, string> database;
database["user"] = "123";
它是主要功能的一部分,但我怎样才能打印地图的内容呢?最重要的是如何将它变成一个全局变量,以便我可以在其他函数中使用它?我正在尝试将我的打印地图过程置于与地图制作位置不同的功能中。
您可以使用以下代码遍历地图:
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;
}
尝试这个:
#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;
}
}
我建议使用 C++11 功能,例如 for_each、基于范围的begin和end以及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;
});
其次,我会避免使您的地图成为全局变量。全局定义是有原因的,但是对于容器呢?(这可能取决于您的项目有多大,但我想说让我们摆脱任何全局变量,如果确实需要将它放在命名空间中)
为什么不将您的地图封装到一个类中并提供更改地图内容的功能,甚至是您的打印设备?如果你想确保你的类的每个用户都应该有相同的地图内容(翻译这意味着相同的实例),你可以把你的类变成一个单例。
如果您有可用的 C++1(并且作为 Stefan 回答的旁注:您实际上不需要std::for_each
C++11 中的 lambdas),则可以使用基于范围的迭代来完成:
for ( std::pair<std::string,std::string> const &p : database)
std::cout << "key=\"" << p.first << "\" value=\"" << p.second << "\"" << std::endl;
如果您想在其他函数中使用它,请考虑几件事,而不是使变量成为全局变量: