Je viens de commencer à implémenter mon premier programme de taille moyenne en D 2.0 après avoir lu le livre de Andrei Le langage de programmation D. L'un des premiers problèmes que j'ai rencontré était l'utilisation de la bibliothèque std.algorithm avec un tableau associatif intégré. Par exemple:varie de tableaux associatifs 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);
}
Il semblait assez simple chose à moi, attendant que itérer sur l'inter produirait la seule entrée « deux ». Cependant, je reçois cette erreur du compilateur:
./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])
je peux voir que le haut-tableau associatif ne semble pas fournir une version de la gamme à utiliser avec les algorithmes de std.
Ai-je raté quelque chose? Faire quelque chose de mal? Sinon, est-ce une omission flagrante? Y a-t-il une raison pour laquelle cela est indisponible?
Que voulez-vous dire par l'intersection de deux tableaux associatifs? Que faire si 'map1 = [" red ": 4," blue ": 6]' et 'map2 = [" blue ": 2," green ": 1]'? – kennytm
En C++, un exemple proche serait 'std :: map'. Dans ce cas, 'std :: set_intersection' prend le type d'itérateur qui fait essentiellement référence au type de valeur de' std :: pair '. Std :: set_intersection utilise '<' sur value_type qui compare à la fois la clé et la valeur. Donc, dans votre exemple, je m'attendrais à ce que l'intersection soit vide. –
aligature