我最终决定使用std.RedBlackTree代替内置的关联数组(或哈希),因为我需要一个排序的关联数组。所需的行为与C ++ / STL中的std::map非常相似。

void main() {

  alias Tuple!(float, float) Pair;
  alias RedBlackTree!Pair Map;
  Map m1;
  m1.insert(Pair(1.1, 2.2));
}


上面的代码取决于您的编译方式(带有或不带有-release),将导致分段错误或引发断言。

与此相同:

void main() {

  struct Pair { float first, second; }
  alias RedBlackTree!(Pair, "a.first < b.first") Map;
  Map m1;
  m1.insert(Pair(1.1, 2.2));
}


像臭虫一样闻起来,但是有解决方法吗?

最佳答案

RedBlackTree是一个类,因此必须初始化。 m1默认为null。您所看到的与Java中的NullPointerException等效。

试试这个:

import std.stdio, std.container;
void main() {
  struct Pair { float first, second; }
  alias RedBlackTree!(Pair, "a.first < b.second") Map;
  Map m1 = new Map;
  m1.insert(Pair(1.1, 2.2));
}


另外,作为此编程示例的一个提示:您可能想考虑使用RedBlackTree!(Pair, "a.first < b.first")。原因是它会有一些奇怪的(不是很不确定,但可能不是您想要的)行为。

例如,Pair(1, 2) < Pair(1, 3)为true。奇怪的是,Pair(1, 3) < Pair(1, 2)也会成立。

关于d - 为什么std.RedBlackTree作为 map 损坏?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10157714/

10-11 18:25