我在阅读Andrei的书《D编程语言》后,开始着手实施我的第一个中型程序。我遇到的第一个问题之一是如何使用std.algorithm库配合内置的关联数组。例如:
#!/usr/bin/env rdmd
import std.stdio;
import std.algorithm;
void main()
{
alias int[string] StringHashmap;
StringHashmap map1;
map1["one"] = 1;
map1["two"] = 2;
writefln("map1: %s", map1);
StringHashmap map2;
map2["two"] = 2;
map2["three"] = 3;
writefln("map2: %s", map2);
auto inter = setIntersection(map1, map2);
}
对我来说,似乎这是一个简单的事情,期望在迭代过程中产生单个的“two”条目。然而,我得到了这个编译器错误:
./test.d(20): Error: template std.algorithm.setIntersection(alias less = "a < b",Rs...) if (allSatisfy!(isInputRange,Rs)) does not match any function template declaration
./test.d(20): Error: template std.algorithm.setIntersection(alias less = "a < b",Rs...) if (allSatisfy!(isInputRange,Rs)) cannot deduce template function from argument types !()(int[string],int[string])
我可以看到内置的关联数组似乎没有提供任何版本的范围与std算法一起使用。
我是否漏掉了什么?做错了什么?如果没有,这是一个明显的遗漏吗?为什么这样做是正确不可用的?
map1 = ["red":4, "blue":6]
和map2 = ["blue":2, "green":1]
,会怎样? - kennytmstd::map<std::string, int>
。在这种情况下,std::set_intersection
使用迭代器类型,它基本上引用了std::pair<const std::string, int>
的value_type。std::set_intersection在value_type上使用<
来比较键和值。因此,在您的示例中,我预计交集将为空。 - aligature