Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::vect使用成员变量排序_C++_Sorting_Vector_Std_Member Functions - Fatal编程技术网

C++ std::vect使用成员变量排序

C++ std::vect使用成员变量排序,c++,sorting,vector,std,member-functions,C++,Sorting,Vector,Std,Member Functions,我被这段代码困住了: class MyObject { public: int value; } class MyClass { private: btAlignedObjectArray<MyObject*> m_objects; public: int comp (MyObject *a, MyObject *b) { return calculateTheNewValue(a->value) < calculat

我被这段代码困住了:

class MyObject
{
public:
    int value;
}

class MyClass
{
private:
    btAlignedObjectArray<MyObject*> m_objects;

public:

    int comp (MyObject *a, MyObject *b)
    {
        return calculateTheNewValue(a->value) < calculateTheNewValue(b->value);
    }

    void doSort()
    {
        m_objects.quickSort(comp);
    }

    //edit: this member function is needed to do the sorting
    int calculateTheNewValue(int v)
    {
            // do some calculation using other members variables, not necessarily m_objects
    }

};
编辑

这是btAlignedObjectArray的声明


第365行有声明或
快速排序
如果需要将
comp
转换为二进制函数,则将其包装在函子中。如果可以使用C++11,请使用lambda:

m_objects.quickSort([&](MyObject * lhs, MyObject * rhs) {
        return this->comp(lhs,rhs)
    });
如果不能使用C++11,则创建一个具有类似行为的函子类

struct compare
{
    MyObject & obj_;
    compare(MyObject& obj) :obj_(obj) {}

    bool operator()(MyObject * lhs, MyObject * rhs) const {
        return obj_.comp(lhs,rhs);
    }
};

...

void doSort()
{
    m_objects.quicksort(compare(*this));
}

comp不需要任何对m_对象的访问,因为您已经传递了应该相互比较的对象。你确定这个例子是完整的吗?@j_schultz对不起,我遗漏了代码的一个重要部分,可能是咖啡太多(或太少)。calculateTheNewValue()是执行排序显示声明所需的成员函数,
btAlignedObjectArray::quickSort
。如果calculateTheNewValue不引用m_对象,则comp和calculateTheNewValue可以是静态的。@lulyon calculateTheNewValue计算引用其他成员变量的值,我必须编辑以澄清我使用的是Xcode 4.6,它无法识别[&](x,y){…}语义,我将尝试函子方法,顺便问一下,它是如何调用的,它是一种作为parameter@rraallvv:你是说那句话叫什么?它叫a。@rraallvv:顺便说一下,我不使用XCode,但我很确定它支持C++11,您只需要启用它。检查这个:lambda方法起作用了,Xcode在其他文件中显示了一些其他错误,但是我可以尝试只为这个文件启用c++11
struct compare
{
    MyObject & obj_;
    compare(MyObject& obj) :obj_(obj) {}

    bool operator()(MyObject * lhs, MyObject * rhs) const {
        return obj_.comp(lhs,rhs);
    }
};

...

void doSort()
{
    m_objects.quicksort(compare(*this));
}