在C ++中,如果可以找到密钥,map的索引运算符将返回对现有值的引用,或者如果找不到具有给定键的值,则引用新的默认初始化值。
在D中,当无法找到具有给定键的值时抛出异常,类似于C ++中的unordered_map::at
。所以,如果我想模仿相同的行为(获取或初始化为默认值),我必须做类似的事情
// Assume bar is some associative array of type Foo[string]
Foo* value = key in bar;
if (!value) {
bar[key] = Foo.init;
value = &bar[key];
}
这似乎是次优的,因为它涉及三个哈希(两次查找和一次插入)。是否有更有效或更清洁的方法呢?
答案 0 :(得分:1)
如果aa.get(key, defaultValue)
存在,您可以使用key
从AA获取值,否则使用defaultValue
。这可以节省额外的查询,如果您真的不需要在AA中插入默认值,那么只需一次查找即可。
即:
Foo value = bar.get(key, Foo.init);