私はDの標準ライブラリでSetの実装を探していましたが、次のものしか見つかりませんでした。
- BinaryHeap
- RedBlackTree
使い方がわかれば、どちらも問題なく動作します。私はRedBlackTreeから始めました(私はすでにそれらがどのように機能するかを知っているので)、そしてこれは私が思いついたものです:
auto rbt = redBlackTree!string();
foreach(s; setOfStrings) {
rbt.insert(s);
}
foreach(s; rbt) {
if (s[0 .. 3] == "sth") {
rbt.removeKey(s);
}
}
最初のforeachで条件を実行できたはずですが、これは、セットに要素を追加したり、セットから要素を削除したりする必要があることを示す単なる例です。これは機能しますが、コンパイルエラーが発生します。
エラー:template std.container.RedBlackTree!(string).RedBlackTree.removeKey(U)if(isImplicitlyConvertible!(U、Elem))がどの関数テンプレート宣言とも一致しません
エラー:template std.container.RedBlackTree!(string).RedBlackTree.removeKey(U)if(isImplicitlyConvertible!(U、Elem))は、引数の型からテンプレート関数を推測できません!()(string
赤黒木(重複のないもの)は必要ありません。速度はそれほど重要ではありません。私はこのようなことをすることができます:
string[] arr;
foreach(s; setOfStrings) {
// check for duplicate code here...
arr ~= s;
}
for(int i = 0; i < arr.length; i++) {
if (s[0 .. 3] == "sth") {
arr = arr[0 .. i] ~ arr[i + 1 .. $];
i++;
}
}
単純なセットの標準ライブラリに何かありますか?