Уверен, что мне не хватает чего-то очевидного здесь - остальная часть D (даже ошибки компилятора) была очень разумной и простой в использовании Понимаю. У меня есть std.containers.Array
сопоставимых структур, и я бы хотел его отсортировать. в документации std.containers
указано, что для использования материала в std.algorithm
вам необходимо нарезать его либо array[]
, либо array.opSlice()
. Хорошо, без проблем.std.algorithm.sorting терпит неудачу с неясными ошибками при использовании Array! T и opSlice()
Однако, если я сделать Array
из двух довольно тривиальных типов, он не будет сортировать (?) - вместо этого, он говорит мне, что рутина глубоко внутри Фобоса не nothrow
B:\lib\D\dmd2\windows\bin\..\..\src\phobos\std\range\package.d(7189): Error: 'std.range.SortedRange!(RangeT!(Array!(MyInt)), "a < b").SortedRange.dbgVerifySorted' is not nothrow
B:\lib\D\dmd2\windows\bin\..\..\src\phobos\std\algorithm\sorting.d(982): Error: template instance std.range.assumeSorted!("a < b", RangeT!(Array!(MyInt))) error instantiating
main.d(21): instantiated from here: sort!("a < b", cast(SwapStrategy)0, RangeT!(Array!(MyInt)))
Минимальный например, ниже , Первый sort
(автоматически созданный стандартный массив из двух значений) сортируется в порядке. Другие вызовы sort
терпят неудачу с вышеупомянутыми ошибками компилятора. Создавая DMD2 из VS Community 2015, я не могу найти идентификатор версии компилятора, но это было загружено только вчера.
import std.array;
import std.container.array;
import std.algorithm.sorting;
struct MyInt
{
int data;
int opCmp(MyInt o)
{
return data - o.data;
}
}
int main(string[] argv)
{
MyInt ami, bmi;
Array!MyInt arr = [ ami, bmi ];
sort([ami, bmi]);
sort(arr[0..2]);
sort(arr[]);
sort(arr.opSlice());
return 0;
}
Это очень раздражает! Я могу заставить его работать в режиме отладки путем преобразования в стандартный массив: 'auto arr2 = std.array.array (arr []); сортировать (arr2); arr = Array! MyInt (arr2); 'но это совсем не идеально подходит для производительности или читаемости ... Спасибо в любом случае! – TheWyrdsmith