问题标签 [strict-weak-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.

0 投票
6 回答
29378 浏览

c++ - 运算符<和严格的弱排序

如何定义operator<n 元组(例如 3 元组)以满足严格的弱排序概念?我知道 boost 库有正确定义的元组类,operator<但由于某些原因我不能使用它。

0 投票
4 回答
9334 浏览

c++ - stl ordering - 严格的弱排序

为什么 STL 可以使用严格弱排序的比较函数?为什么不能是偏序?

0 投票
4 回答
16778 浏览

c++ - 通过 'tuple' 和 'tie' 实现比较运算符,好主意吗?

(注意:tuple并且tie可以取自 Boost 或 C++11。)
在编写只有两个元素的小型结构时,我有时倾向于选择 a std::pair,因为所有重要的事情都已经针对该数据类型完成了,例如operator<严格-弱排序.
缺点是几乎没有用的变量名。即使我自己创造了那个typedef,我也不会记得 2 天后是什么first以及second究竟是什么,特别是如果它们都是同一类型的话。这对于两个以上的成员来说变得更糟,因为嵌套pair非常糟糕。
另一种选择是tuple,来自 Boost 或 C++11,但这看起来并没有更好更清晰。所以我回去自己编写结构,包括任何需要的比较运算符。
由于特别是operator<可能非常麻烦,我想通过仅依靠为 定义的操作来规避这整个混乱tuple

的示例operator<,例如对于严格弱排序:

(从传递的参数 中进行tie引用。)tupleT&


编辑:@DeadMG 提出的私下继承的建议tuple不错,但也有不少缺点:

  • 如果运营商是独立的(可能是朋友),我需要公开继承
  • 通过强制转换,我的函数/运算符(operator=特别是)可以很容易地被绕过
  • 使用该tie解决方案,如果某些成员对订购无关紧要,我可以忽略它们

我需要考虑此实现中的任何缺点吗?

0 投票
4 回答
6516 浏览

c++ - STL 少运算符和“无效运算符<”错误

我有一些代码在 VS 10.0 中编译得很好,但是在下面的 Orders 映射中插入了一些项目后,我在 Microsoft 调试库中收到“无效的运算符 <”错误。我的 less 运算符很简单,只是将 8 字节字符串 char 逐个比较。有人知道为什么我会收到此错误吗?

0 投票
0 回答
2183 浏览

c++ - 严格的弱排序和 std::sort()

我已经尝试了一段时间以使以下代码正常运行。问题出在 sort(comp) 的比较函数中。它比较 2 个双精度值,但在某些情况下,它会导致程序崩溃并显示消息“调试断言失败!程序:retrace.exe 文件:c:程序文件 (x86)\microsoft visual studio 10.0\vc\include\algorithm Expression:Invalid运算符< "。我 100% 来自 stl 的排序,因为当程序崩溃时,成功执行的最后一行是排序前的那一行。起初我认为这是 double 的一些精度问题,但现在我对此表示怀疑。任何帮助或信息将不胜感激。

0 投票
2 回答
779 浏览

c++ - 保持 std::multiset 中相等元素的插入顺序

我有一个 std::multiset 排序的自定义对象。多重集中的两个相等对象(基于 < 运算符)可能包含一些不相等的字段。在这种情况下,我需要保持在 multiset<> 中插入对象的顺序。

我知道如果我使用的是 C++11,这不是问题,但目前还不是。

我看到的另一个解决方案使用类中的时间戳字段 using <ctime>,但分辨率为 1 秒。如果我在同一秒内有 2 次插入,那么我不能在比较操作中使用时间戳。我们没有/不能在这个项目上使用 boost::chrono。

我可以使用另一种方法来确保维护插入顺序吗?

0 投票
3 回答
3798 浏览

c++ - 严格的弱序混淆

我对严格的弱排序以及在定义 operator< 时如何使用它感到困惑。我有几个结构:

我想创建一个std::set机场。我需要定义 operator< 使用严格的弱排序,但我不知道这意味着什么和/或如何去做。

一个机场“少于”另一个机场是没有意义的。仅当机场根据其统计数据相等时才有意义。

我如何确定我对 operator< 的定义将遵循严格的弱排序?operator<在这种情况下,我如何开始考虑定义?

如果可能的话,一个带有解释的例子会很棒!

0 投票
4 回答
318 浏览

c++ - C++ Stl 设置行为

我试图运行下面的代码。我发现输出存在差异。我了解比较器功能中使用的排序机制存在问题。我基本上要寻找的是:1)Set如何在内部存储数据。2)如何解决此问题或将数据复制到不同集合的最佳方法。3)排序究竟是如何产生这个问题的。

0 投票
2 回答
1534 浏览

language-agnostic - 全序、弱序、偏序 - 完整定义

之间有什么区别

  • 严格/非严格排序,
  • 弱/非弱排序,以及
  • 部分/全部排序?
0 投票
2 回答
463 浏览

c++ - std::list 严格弱排序

我在使用 std::list::sort 函数时遇到了很多麻烦,它在大多数情况下都有效,但是每隔一段时间它就会抛出一个断言“无效运算符<”。研究这个问题,我意识到这是因为我的排序函数没有遵循严格的弱排序,但是当我查看我的代码时,我不明白为什么它没有遵循严格的弱排序,因为它看起来是正确的,我错过了什么这里?

此函数的目的是根据希尔系统将元素列表排序为公式字符串,即。碳第一,氢第二,所有其他按字母顺序排列。FormulaStruct 仅表示完整公式中的单个元素和数量。

编辑 bHasCarbon 是公式中有碳的条件,因为希尔系统要求如果公式中有碳,那么接下来是氢,否则一切都是按字母顺序排列的,包括氢,这在我的代码的另一部分中规定。