Acabo de comenzar a implementar mi primer programa de mediana escala en D 2.0 después de leer el libro de Andrei The D Programming Language. Uno de los primeros problemas que encontré fue el uso de la biblioteca std.algorithm con una matriz asociativa incorporada. Por ejemplo:rangos de matrices asociativas en D 2
#!/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);
}
ha parecido una cosa bastante simple para mí, esperando que la iteración en la inter produciría la entrada única "dos". Sin embargo, me sale este error del compilador:
./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])
me puede ver que el incorporado en la matriz asociativa no parece ofrecer ninguna versión de la gama de usar con los algoritmos std.
¿Echo de menos algo? Haciendo algo mal? Si no, ¿es esto una omisión flagrante? ¿Hay alguna razón por la cual esto no está disponible?
¿Qué quiere decir con la intersección de dos matrices asociativas? ¿Qué pasa si 'map1 = [" red ": 4," blue ": 6]' y 'map2 = [" blue ": 2," green ": 1]'? – kennytm
En C++, un ejemplo cercano sería 'std :: map'. En este caso, 'std :: set_intersection' toma el tipo de iterador que esencialmente hace referencia al valor_type de' std :: pair '. La std :: set_intersection usa '<' en el value_type que compara tanto la clave como el valor. Entonces, en su ejemplo, esperaría que la intersección estuviera vacía. –
aligature