在D中模仿C ++的std :: unordered_map索引行为

时间:2015-02-18 00:18:55

标签: hashmap d associative-array lookup

在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];
}

这似乎是次优的,因为它涉及三个哈希(两次查找和一次插入)。是否有更有效或更清洁的方法呢?

1 个答案:

答案 0 :(得分:1)

如果aa.get(key, defaultValue)存在,您可以使用key从AA获取值,否则使用defaultValue。这可以节省额外的查询,如果您真的不需要在AA中插入默认值,那么只需一次查找即可。

即:

Foo value = bar.get(key, Foo.init);

参考:http://dlang.org/hash-map.html