gpt4 book ai didi

C++ 映射 : manipulate map inside map

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:22 25 4
gpt4 key购买 nike

我更习惯使用单个 map 而不是嵌套 map 。所以我很难理解如何处理这个问题。

备注:请不要要求我使用multimap或者boost,我限制使用这个结构

在C++ STL映射中,我有这样的定义

map<string, map<string, string>> exploration; // country --> state --> city

第一个映射表示一对键(国家)和值作为树结构 map<string, string>代表各自的州和城市。

我知道如何像这样(硬编码)手动填充此结构:

exploration["Canada"]["Ontario"] = "Toronto";

问题:

稍后上面显示的数据将由用户输入:

> Canada Ontario Toronto

> Canada Alberta Edmonton

> USA Washington Seatle

> USA Nevada Las-Vegas

因此,如果我将此逻辑应用于上面的示例,这是错误的,因为 map 不接受重复的键

插图(错误):

exploration["Canada"]["Ontario"] = "Toronto";
exploration["Canada"]["Alberta"] = "Edmonton";

插图(我在找什么):

exploration["Canada"]["Ontario"] = "Toronto";
["Alberta"] = "Edmonton";

Canada
**
* *
* *
Ontario Alberta
* *
* *
Toronto Edmonton

我假设的解决方案,

> Canada Ontario Toronto

1例:如果勘探结构中不存在国家(加拿大),则添加省市。

2 情况:如果国家(加拿大)存在,那么我在之前输入的数据的长边加上Ontario 和 Toronto。

欢迎任何指示、想法或提示。

最佳答案

你的例子很正确。查看下面的代码(在 C++11 中,但同样的推理适用于以前的版本),您可以看到每个国家只在 exploration 中插入一次。 map 。

代码:

#include <iostream>
#include <map>

using namespace std;

int main() {
map<string, map <string, string> > exploration;
exploration["Canada"]["Ontario"] = "Toronto";
exploration["Canada"]["Alberta"] = "Edmonton";
exploration["USA"]["Washington"] = "Seattle";
exploration["USA"]["Nevada"] = "Las Vegas";

cout << "Number of keys: " << exploration.size() << endl;

for (auto country : exploration) {
for (auto city : country.second)
cout << country.first << ":" << city.first << " -> " << city.second << endl;
}

return 0;
}

输出:

Number of keys: 2
Canada:Alberta -> Edmonton
Canada:Ontario -> Toronto
USA:Nevada -> Las Vegas
USA:Washington -> Seattle

让我们一步一步来了解发生了什么:

  1. map<string, map <string, string> > exploration : 定义一个map,其key为字符串,value为其他map。到目前为止它是空的。
  2. exploration["Canada"]["Ontario"] = "Toronto" : 首先它检查 Canada exploration map 中不存在.因此创建了一个链接 Canada 的映射到一张空 map 。现在,来自 Ontario 的映射至 Torontoexploration["Canada"] 中创建 map 。
  3. exploration["Canada"]["Alberta"] = "Edmonton" :自Canada key 已存在于 exploration 中,无需重新创建。它只会映射 AlbertaEdmonton在已经创建的 map 中。

同样的推理适用于 USA map 。这样,即使是嵌套映射也不会有重复键。 C++ 很棒。

关于C++ 映射 : manipulate map inside map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49420635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com