问题标签 [partial-ordering]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 类模板特化偏序和函数综合
选择哪个类模板特化是首选的规则包括将特化重写为函数模板,并通过函数模板的排序规则 [temp.class.order] 确定哪个函数模板更特化。考虑这个例子,然后:
gcc 和 clang 都2
在这里打印。这对于前面的一些示例是有意义的 - 对非推导上下文 (void
反对void_t<T>
) 的推导只是被忽略了,因此在两个论点中对推导<T, void_t<T>>
成功<X*, void>
但<T*, void>
对推导<Y, void_t<Y>>
失败。美好的。
现在考虑这个概括:
clang 和 gcc 都将这种专业化报告为模棱两可,介于1
和之间2
。但为什么?合成的函数模板没有歧义。这两种情况有什么区别?
c++ - C++模板说明
有人可以向我解释一下关于 C++ 模板中“部分排序”的以下几行——“如果与 X 指定的参数列表匹配的每个参数列表也与 Y 指定的参数列表匹配,则模板 X 比模板 Y 更专业,但反之则不然。”
我无法理解这句话的意思。
algorithm - 嵌套嵌套集的算法
我有大量集合,其中一些是彼此的子集,例如:
我想获取这个集合并输出子集关系的偏序 DAG
除了比较集合的所有组合(当有大量集合时这是禁止的)之外,有没有办法做到这一点。这似乎接近于一些设置封面问题,但是,我找不到可以减少的问题。
一种优化是创建一个倒排索引,这将有助于避免比较没有像{2, 6}
and这样的公共元素的集合{1, 5}
。
这几乎是Generate a DAG from a poset using stricly functional programming的复制品,但我对非纯功能性的解决方案持开放态度。
swift - 标准库中是否有一种稳定的排序方式可以处理部分订单?
我有要以伪拓扑方式排序的任务列表。说,我有这样的事情:
我要求a
在任何任务之前执行所有b
任务,并且在所有b
任务之前执行所有c
任务。此外,同一时间的所有任务都需要保持与输入中相同的顺序。
用计算机科学术语来说,我需要的是
- 稳定的排序算法和
- 一种为其提供部分订单的方法。
Swift 标准库中有这样的东西吗?
观察:
Comparable
,一种用于排序的自然协议,要求顺序是总的。sorted
可以使用部分订单,但不稳定。
作为替代方案,拓扑排序算法也可以工作,即使它会做的比我需要的更多。
algorithm - 在偏序集中查找大于给定的元素
我有一组S
类型的元素T
。<=
type 的元素有一个偏序T
。众所周知,其中的所有元素S
都不是有序的。然后,我需要一种方法来执行以下查询:拥有type的元素,找到这样的e
T
e'
S
e <= e'
.
是否有允许有效执行此类查询的数据结构(无需线性扫描S
)?
重要提示:T
是完整的格子。
scala - 根据偏序在集合中的最小选择
不幸的是,我被迫发布尽可能少的代码片段,所以我会尽力清楚地解释问题,提前为冗长道歉。
问题陈述(设计):
我有一个抽象类 Predicate,它由两个子类 NumericPredicate 和 CategoricalPredicate 实现,它们配备了“谓词类型”和“比较值”:
NumericPredicate -> 类型为“<=”或“>”,比较值是 double 类型(但任何可比较的对象都可以) CategoricalPredicate -> 类型为“is-in”或“is-not-in”,并且比较值是一组字符串(但任何配备相等的无序类型都可以在这里工作)
此谓词构成规则的头部(谓词类型的有序序列),如果所有谓词都成立,则匹配。
在这种情况下,谓词可以是“冗余的”(例如,“value <= 2”比“value <= 3”更具体,因此可以安全地删除后者)并且可以删除以提高规则的可读性(其次也有性能提升,但这不是这里的重点)。
目标:
我现在正在为此类规则头实施“减少”阶段,并且正在寻找一种干净的方法来实现这一目标。在实践中,给定集合元素的部分排序(部分是因为无法比较不同种类的谓词),我的减少在于原始集合的谓词中的最小值(每个谓词类型一个)。
我的实际解决方案:
我为 Predicate 类配备了特征 Comparable(“with Comparable[Predicate]”),因此方法“compareTo”在 NumericPredicate 和 CategoricalPredicate 中实现:
接下来是 NumericPredicate 类的方法的实现:
现在,我想要的是通过将不同的谓词组织成可比较的子集合来实现,这些子集合是独立处理的,如下所示:
问题:
有没有更惯用的方式来在 Scala 中实现部分排序(并且能够在无与伦比的种类中保持所有最小值)?编辑:我知道我正在尝试将部分排序“破解”为总排序(因为它应该是 Comparable),但我看不到如何通过更合适的特征 PartialOrdering 实现我想要的
假设我的设计选择没问题,当比较两个无法比较的对象时,返回 0 或抛出异常会更好吗?(我的印象是我在默默地压制一个错误,因为在这种情况下,比较两个无法比较的元素是错误的和毫无意义的)
wordpress - WooCommerce REST API:更新订单行项目元数据以进行发货
我偶然发现了一个使用 node.js 通过 WooCommerce REST API 更新订单行项目元数据的问题。
我一直在按照这些步骤更新订单(并且在某些领域取得了成功): https ://woocommerce.github.io/woocommerce-rest-api-docs/#update-an-order
现在,我想要实现的是更改订单的已发货行项目数。我通常会在 wordpress UI 中使用部分订单 WC 插件。
下面,您可以找到我使用订单 API 调用从 WC 获得的订单项的屏幕截图。meta_data 数组的最后一个元素有键“shipped”,它包含一个带有一个对象的数组,说明一个(两个订购的物品中的一个)已经发货:
如您所见,键 'shipped' 的值是一个对象。当我将它(返回)发送到 WC 时,我收到一条错误消息:
"data":{"status":400,"params":{"line_items":"line_items[0][meta_data][3][value] is not of type string."}}}
当我尝试将值作为字符串发送时,即
lineItems[0].meta_data = [{key:"shipped", value: "[{qty:'2'}]" }]
我没有收到任何错误,但是 WC 将其视为字符串,而不是对象,并且不会按照我的意图更新数据库中的装运数量(它只会将装运数量降至 0):
任何见解或想法 - 我如何通过 WC API 修改订单项的发货数量?
c++ - 为什么接受数组的 C++ 模板不比接受 GCC 5.3 和 Clang 4.0 的指针更专业?
为什么接下来的两个模板声明模棱两可(所以没有一个比另一个更专业)?我知道这个问题已经在 Stack Overflow 上提出过很多次,但通常人们会回答如何解决歧义,而不是为什么会发生这种情况。
我。
template <class T> void func(char* buf, T size) {}
二、
template <std::size_t N> void func(char (&buf)[N], std::size_t size) {}
尝试通过 C++14 标准的步骤来解决部分函数模板排序 (14.5.6.2):
为了生成转换后的模板,对于每个类型、非类型或模板模板参数(包括其模板参数包 (14.5.3)),分别合成唯一的类型、值或类模板,并将其替换为该参数的每次出现在模板的函数类型中。
转换函数 I 模板的函数类型是:void func(char*, U1)
,其中U1
是一些独特的合成类型。
转换后的函数 II 模板的函数类型是:void func(char (&buf)[N1], std::size_t)
,其中N1
是一些独特的合成值。
使用转换后的函数模板的函数类型,对另一个模板执行类型推导,如 14.8.2.4 中所述。
因此,让我们尝试在一侧(使用第一个模板作为参数,第二个模板作为参数模板)和另一侧执行类型推导。
情况1。
参数模板:template <std::size_t N> void func(char (&buf)[N], std::size_t size)
. 转换后的参数模板:void func(char*, U1)
.
试图推断模板参数。" char (&buf)[N]
" 不能从 " char*
" 类型推导出来。U1 也不匹配std::size_t
类型。失败的。
案例 2。
参数模板:template <class T> void func(char* buf, T size)
. 转换后的参数模板:void func(char (&buf)[N1], std::size_t)
.
试图推断模板参数。参数模板的第一个参数根本不是类型,它与char[]
. T
应推导出来std::size_t
。
所以模板二应该更专业,应该在下面的代码中选择:
为什么 GCC 5.3 和 Clang 4.0 不是这样?
c++ - 为什么 C++ 模板接受数组并不比一个接受指针 (bis) 更专业?
关于这个问题,它确实具有相同的标题,但我在标准中找到了答案。我继续挖掘这个主题,最后找到了一个不适用这个答案的示例代码。
让我们考虑这段代码:
根据[temp.func.order]和[temp.deduct.partial]中的偏序规则,如果通过执行这段代码来解释此规则,则模板 II将比模板 I更专业:
所以按照这个解释,模板二应该更专业。为什么不是这样?