将不同种类的Z3 expr存储到地图中的困难

将不同种类的Z3 expr存储到地图中的困难,z3,Z3,我创建了z3::expr和int对的std::map,并希望存储不同的表达式。然而,当我存储不同类型的表达式时,比如说先存储一个64位向量,然后存储一个32位向量,编译器抛出了一个z3::异常,并抱怨bvslt的函数应用程序无效,在参数位置2排序不匹配,预期(u.BitVec 64),但给定(u.BitVec 32)。如果我只存储64位矢量或32位矢量的expr,它不会抱怨。我不知道bvslt是如何存储两个独立表达式的 所以我的问题是,有没有办法将不同排序的表达式存储到一个映射中?当然可以存储不

我创建了z3::expr和int对的std::map,并希望存储不同的表达式。然而,当我存储不同类型的表达式时,比如说先存储一个64位向量,然后存储一个32位向量,编译器抛出了一个z3::异常,并抱怨bvslt的函数应用程序无效,在参数位置2排序不匹配,预期(u.BitVec 64),但给定(u.BitVec 32)。如果我只存储64位矢量或32位矢量的expr,它不会抱怨。我不知道bvslt是如何存储两个独立表达式的


所以我的问题是,有没有办法将不同排序的表达式存储到一个映射中?

当然可以存储不同排序的表达式。 根据您的描述,您正在运行一个C++重载“体验”。
运算符<重载为exprs。相反,您希望将表达式上的比较用作抽象语法树。表达式公开一个唯一标识符,它是一个无符号的。您希望通过在这些标识上传递比较运算符来声明std::map模板。这通常是通过声明一个helper结构或类来完成的。既然你已经使用C++,我假设你知道如何做这件事:-)./p>我创建了一个比较两个ExPR哈希的结构,它工作。如果你有更好的比较标准,请告诉我