操作符重载- c++: next_permutation的比较函数

operator overloading - c++ : comparison function for next_permutation

本文关键字:permutation 比较 函数 next 重载 c++ 操作符      更新时间:2023-10-16

我想在对象的向量上使用std::next_permutation()

为此,我必须定义一个比较函数,该函数定义两个对象之间的< operator(否则它将使用具有不可预测行为的默认比较操作符)

但有时我得到两个相等的对象(根据我的标准),因此Object1 < Object2Object2 < Object1都返回false,因此next_permutation()无限地…

EDIT:这是我所拥有的一个简单示例(循环永远不会结束)

MyObject.h:

class MyObject {
    int param;
    MyObject(int i);
};

Main.cpp:

bool comparison (MyObject * o1, MyObject * o2) { return (o1->param < o2->param); }
int main(){
    std::vector<MyObject*> myVector;
    myVector.push_back(new MyObject(0));
    myVector.push_back(new MyObject(1));
    myVector.push_back(new MyObject(1));
    std::sort(myVector.begin(), myVector.end(), comparison);
    do{
        printf("%i, %i, %i n", myVector[0]->param, myVector[1]->param, myVector[2]->param);
    } while(std::next_permutation(myVector.begin(), myVector.end()), comparison);
    return 0;
}

那么我该如何处理这种情况呢?默认的< operator如何处理这种情况?

在你的代码中:

while(std::next_permutation(myVector.begin(), myVector.end()), comparison)

你的父母放错地方了

应该是

while(std::next_permutation(myVector.begin(), myVector.end(), comparison))

否则您使用默认比较执行std::next_permutation,使用逗号操作符丢弃结果,然后返回始终为真(函数指针不为空)的comparison

但有时我有两个相等的对象

std::next_permutation不需要一个唯一的元素范围。

因此,这应该可以工作。你做错了什么

那么我该如何处理这种情况呢?

修复你的错误。

当然,我们没有办法知道那是什么,因为您没有展示您的测试用例。