Я только начал реализовывать свою первую программу среднего масштаба на D 2.0 после прочтения книги Андрея Язык программирования 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);
}
Это казалось мне достаточно простой вещью, ожидая, что итерация по интерфейсу создаст одну запись «два». Однако я получаю эту ошибку компилятора:
./ test.d (20): Ошибка: шаблон std.algorithm.setIntersection (псевдоним less = "a
./ test.d (20): ошибка: шаблон std.algorithm.setIntersection (псевдоним less = "a
Я вижу, что встроенный ассоциативный массив, похоже, не предоставляет какой-либо версии диапазона для использования с алгоритмами std.
Am Я что-то пропустил? Делать что-то не так? Если нет, то это явное упущение? Есть ли какая-то причина, по которой это правильно недоступно?