- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我更习惯使用单个 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
让我们一步一步来了解发生了什么:
map<string, map <string, string> > exploration
: 定义一个map,其key为字符串,value为其他map。到目前为止它是空的。exploration["Canada"]["Ontario"] = "Toronto"
: 首先它检查 Canada
exploration map
中不存在.因此创建了一个链接 Canada
的映射到一张空 map 。现在,来自 Ontario
的映射至 Toronto
在 exploration["Canada"]
中创建 map 。exploration["Canada"]["Alberta"] = "Edmonton"
:自Canada
key 已存在于 exploration
中,无需重新创建。它只会映射 Alberta
至 Edmonton
在已经创建的 map 中。同样的推理适用于 USA
map 。这样,即使是嵌套映射也不会有重复键。 C++ 很棒。
关于C++ 映射 : manipulate map inside map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49420635/
我一直在研究这段代码,但我找不到问题所在。该程序确实可以编译并运行,但最终出现 fatal error 。 程序读取文件并收集数字以计算总数(将它们转换为 float 后)。然后它读取文件并显示小于
我是计算机科学的新手,最近上了一节课。我正在努力解决这个问题,尽管我知道按位运算,但我还是不太明白 问题图片: 我可以有一个明确的解释吗? 最佳答案 答案:B 解释: 使用德摩根定律 (https:/
我发现了这个问题, 编写一个不使用乘法返回给定整数 n 的平方的函数。 对此的解决方法是 public static int sq(int n){ int i = n;
我在某处听说使用 XOR 是不可逆的(他们谈到了加密),但我不明白这是什么意思? AFAIK 即使使用 OR 操作,您也无法找出两个位中的哪一个是 1。请知道这意味着什么的人可以向我解释一下吗? 谢谢
由于一些原始研究和需要为其开发工具,我想出了一些新的,我希望能更好/更快地执行某些数学运算。 Atm 我正在研究伪代码,将它们发布在网站上,以回答已经提出的问题。 然而,在我这样做之前,我想尽可能地优
我经常遇到使用位运算符来做快速、简单和优雅的事情的人。我想学习一些有用的技巧。有哪些最有用的按位运算符案例? 最佳答案 恒定时间 2-幂运算: x = 1 << n; // x = pow(2, n)
我们需要为我的计算机体系结构类编写一个模拟IEEE浮点数除法的程序。我几乎已经做到了,但是我认为查看程序在APL中的样子会很有趣,但是据我所知,没有(简单的)方法可以在APL中进行按位运算(按位和/或
我正在寻找具有以下特征的按位运算序列以下属性: | 00 01 10 11 ---|--------------- 00 | 00 01 | 01 01 10 | 00 01 00
我有一系列位标志,其顺序类似于 {none=0x00, puppies=0x01, kittens=0x02, cute=0x04, funny=0x08, scary=0x10} 等等。 每当用户进
我正在尝试有效地执行以下任务: INPUT VALUE: 01101011 MASK: 00110010 MASK RESULT: --10--1- AGGREGATED: 00000
我需要一种快速的方法来计算位向量的索引间隔的设置位数。例如,给定 10000100100011000 和索引区间 [2, 5],返回值为 2。索引从右边的 0 开始。我有很多疑问要以这种方式完成。分别
我有以下表达式来计算奇偶校验位: AB0E 异或 73C9 异或 D46A 异或 06E3 这将如何评估?是吗: (((AB0E XOR 73C9) XOR D46A) XOR 06E3) 或者是:
我需要对 7 位值进行任意重新排序(是的,我知道我应该使用表格)并且想知道是否有任何技巧可以做到这一点。 例子: // -> // the naive way out = (0x020 &
假设我有这两个数字: x = 0xB7 y = 0xD9 它们的二进制表示是: x = 1011 0111 y = 1101 1001 现在我想在给定点交叉(GA),比如从位置 4 开始。 预期的结果
我想知道是否有办法使用按位运算符屏蔽 int 值列表,并使用该掩码来知道 int 值是否是掩码中的值之一。 即如果我有值 129 和 17,如何计算一个掩码,告诉我一个 int 值是否在掩码中对应(如
我需要使用卡片外的字节码验证器来验证Java Card程序(盖帽文件)。 我已经手动修改了cap文件中的信息,并且我想验证新的cap文件是否类型正确。 我尝试使用com.sun.javacard.sc
我正在尝试找到实现此目标的正确方法的方法: 想象一下,我们有一组位集,如下所示: 00100 00101 10000 00010 10001 我想测试一下,哪些位在所有位集中仅设置了一次。在该示例中,
我不完全理解这种计算奇偶校验位的算法。 有人可以详细解释一下吗? 以下代码摘自《黑客的喜悦》一书: int parity(unsigned x) { unsigned y; y = x ^
我有一个任意 8 位二进制 数字,例如,11101101 我必须交换所有的位,如: 交换前:11-10-11-01交换后:11-01-11-10 我在面试中被问到这个问题! 最佳答案 在伪代码中: x
在我的国际象棋引擎中,它使用位板来表示棋盘的状态,一次生成一大块伪合法移动,结果是位板。例如: 棋子: 稍后一点位板魔法: 最后的位板只是一大块可能的 Action 。引擎通常如何获取此位板并从中生成
我是一名优秀的程序员,十分优秀!