问题标签 [custom-compare]

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 投票
1 回答
29 浏览

c++11 - 对于指向 std::set 容器中用户定义类的指针,自定义比较类无法正常工作

我不明白为什么在这个代码示例中,std::set 容器没有根据我定义的比较类对实体进行排序。任何人都可以帮助我吗?谢谢

输出:

实体[0]:编号:2

实体[1]:编号:1

实体[2]:编号:4

实体[3]:编号:3

我希望得到以下输出:

实体[1]:编号:1

实体[0]:编号:2

实体[3]:编号:3

实体[2]:编号:4

0 投票
1 回答
73 浏览

c++ - 如何使用 C++ 自定义比较函数对某些参数进行排序?

我正在尝试按 O 点的极角对平面上的点进行排序。代码的简化版本如下所示:

那么,如何在调用 sort 函数时将点 O 传递给该函数,它将使用 comparePolar 作为其比较函数?

0 投票
3 回答
89 浏览

c++ - 为什么这个简单的元组自定义比较器即使在严格弱排序的情况下也会崩溃?

tuple<int, int, int>对于下面的示例测试,这个简单的类型崩溃自定义比较器。我检查cout了比较器中的语句cmp,每次调用cmp都会获得一个返回值,所以它不像元组 t1 和 t2 中的值是垃圾。

知道为什么这会崩溃吗?这个非常简单的自定义比较器有什么问题吗?

0 投票
1 回答
26 浏览

c++ - Q1:priority_queue“来之前意味着最后输出”,Q2:自定义比较排序和priority_queue

第一季度

https://en.cppreference.com/w/cpp/container/priority_queue

我在看这个网页,在模板参数部分比较这样说。

但是因为优先级队列首先输出最大的元素,所以“先来”的元素实际上是最后输出的。

我学会了这样的堆实现。

所以如果我做最大堆,那么数组就会像这样。

https://media.vlpt.us/images/emplam27/post/4a05c33e-2caf-4b28-964c-7019c13ff34b/%ED%9E%99%20-%20%EB%B0%B0%EC%97%B4% EB%A1%9C.png

所以我不明白为什么在元素之前会输出最后一个意思。我错过了什么?

第二季度

我想为排序和优先级队列制作自定义比较对象。这是我的代码。

我希望排序应该是升序的,priority_queue 应该是最小堆以首先弹出最少元素。并且代码工作正常。

但我觉得类似比较分开的代码有点不漂亮。

我希望该比较函数与比较类联合,但将重新声明 operator() 函数。

可以统一代码吗?

0 投票
2 回答
91 浏览

c++ - 以 MyElement::SomeMethod 作为自定义比较器的 MyElement 的 std::set

我有一个简单的MyElement类,我想使用 abool MyElement::SomeMethod(...) {...}作为项目的自定义比较std::setMyElement

我已经进行了研究,并且已经知道了一些替代解决方案,我在下面列出了这些解决方案。我也知道如何更改,例如,比较器用std::greater而不是默认值std::less,代码如下:

我的确切问题是我想bool MyElement::SomeMethod(...) {...}用作自定义比较器。我想出的唯一解决方案类似于下面列表中的最后一个,即布尔函数的解决方案:

但是,此解决方案仅适用于 a static MyElement::SomeMethod

我想知道非静态方法是否有类似的或更简洁的方法。

替代解决方案列表:

C++20 的方法

C++11 的方法

函数而不是 lambda

接着

或者

结构和运算符()

接着

布尔函数

接着