gpt4 book ai didi

d - 为什么 std.RedBlackTree 作为 map 中断?

转载 作者:行者123 更新时间:2023-12-04 02:26:11 27 4
gpt4 key购买 nike

我最终决定使用 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 默认为空。您所看到的相当于 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)会是真的。奇怪的是,Pair(1, 3) < Pair(1, 2)也是如此。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com