对于Windows 7 64位 所以我设置了我的地图
map<string, string> database;
database["user"] = "123";
它是主要功能的一部分,但我如何打印地图的内容?最重要的是它如何变成一个全局变量,以便我可以通过其他函数使用它?我试图将我的打印地图处理放在与制作地图不同的功能中。
答案 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;
如果您想在其他功能中使用它,请考虑几件事而不是将变量设为全局: