c++ - 无法在 C++ 中打印地图值的地图
问题描述
我尝试使用下面的代码片段来打印地图值的地图,但我无法访问第二个地图值。
#include <iostream>
#include <iterator>
#include <map>
#include <string>
using namespace std;
int main()
{
map< string, std::map<std::string, int> > someStorage;
//First key values
someStorage["key1"]["This Is Layer one"] = 100;
someStorage["Key1"]["This Is Layer Two"] = 120;
//second key, values
someStorage["key2"]["This Is Layer one"] = 110;
someStorage["key2"]["This Is Layer Two"] = 110;
map< string, std::map<std::string, int> > ::iterator itr;
cout << "\nThe map is : \n";
for (itr = someStorage.begin(); itr != someStorage.end(); ++itr)
{
cout << '\t' << itr->first;
//<< '\t' << (itr->second).first << '\n' <==problematic part
//<< '\t' << (itr->second).second << '\n'; <==problematic part
}
cout << endl;
return 0;
}
如何打印/访问这些值以及如何区分“key1”和“key2”的“这是第一层”。因为我可以看到如果我们分配 key2 值它会被覆盖,所以 key1 具有相同的值。为什么?
我也期待低于键值对
Key1 => {这是第一层,100} {这是第二层,120}
Key2 =>{这是第一层,110} {这是第二层,110}
.
解决方案
除了此处的其他答案之外,您还可以使用结构化绑定(自 c++17 起)来简化此操作:
for (auto const& [key, val] : someStorage) { // val = second map
for (auto const& [k, v] : val) { // k = first, v = second
cout << key << ' ' << k << ' ' << v << '\n';
}
}
推荐阅读
- swift - 元素与通用类型
- string - 如何将字符串中的数字转换为 python 2.7 中的完整函数?
- ios - 验证您的捆绑标识符“org.cocoapods.PhoneNumberKit”是否正确
- import - SAS 循环并导入每个文件。结合两组代码
- python - 为什么 struct.pack 会抛出一个似乎没有类型的异常?
- javascript - 有没有办法在我的代码中提高性能?
- c# - WPF - 一种颜色的奇怪行为绑定问题
- google-apps-script - 如何将 OnEdit(e) 限制在一个范围内?
- php - 分别获取某些表单输入
- c++ - 在 push_back 中调用递归函数