首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >qSort存在的问题

qSort存在的问题
EN

Stack Overflow用户
提问于 2014-07-26 09:27:25
回答 2查看 427关注 0票数 0

我对qSort有个小问题。我只想在我的QList m_acceptedVertices中添加一个顶点之后对我的列表进行排序。

代码语言:javascript
复制
bool Vertex::greaterThan(Vertex * v1, Vertex *v2){

    return this->computeDistanceTo(v1) > this->computeDistanceTo(v2);
}

void Vertex::acceptVertex(Vertex* vert)
{

    m_acceptedVertices.append(vert);

    qSort(m_acceptedVertices.begin(), m_acceptedVertices.end(), greaterThan);

}

但我还是发现了这些错误:

Fehler: C3867:‘顶点::greaterThan’:函数调用缺失参数列表;使用‘&顶点::greaterThan’创建指向成员的指针 Fehler: C2780:'void qSort(容器&)‘:期望提供1个参数-3 Fehler: C2780:'void qSort(RandomAccessIterator,RandomAccessIterator)‘:期望2>参数-3提供

我做错了什么?有人能帮我吗?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2014-07-26 09:46:51

1)您有一个设计问题,您的比较器应该是一个比较2 Vertex的自由函数(或函子),您的实现应该类似于:

代码语言:javascript
复制
bool greaterThan(Vertex * v1, Vertex *v2){

    return v1.computeDistanceTo(v2) > 0;
}

2)使用标准库:std::sort (在大多数情况下,它最有可能在内部执行快速排序,但如果您真的想使用qSort,它也会工作)

带自由函数比较器的最小工作实例

代码语言:javascript
复制
class Vertex {
    public:
     int i;
};

bool greaterThan(Vertex * v1, Vertex *v2)
{
    return v1->i > v2->i;
}

int main()
{
    std::vector<Vertex*> v;
    v.push_back(new Vertex { 5 });
    v.push_back(new Vertex { 1 });
    v.push_back(new Vertex { 3 });
    v.push_back(new Vertex { 6 });
    v.push_back(new Vertex { 2 });

    std::sort(v.begin(), v.end(), &greaterThan);

    for(auto& ve : v)
       std::cout << ve->i << " ";
}

注:

对于简单的比较函数,lambda是一个很好的选择:

代码语言:javascript
复制
std::sort(v.begin(), v.end(), [] (Vertex * v1, Vertex *v2) {return v1->i > v2->i;} );
票数 2
EN

Stack Overflow用户

发布于 2014-07-26 09:58:10

如果您使用的是C++11,那么您可能需要这样的东西:

代码语言:javascript
复制
void Vertex::acceptVertex(Vertex* vert)
{
    m_acceptedVertices.append(vert);

    qSort(hallo.begin(), hallo.end(), 
          [this](Vertex* v1, Vertex* v2) {
               return this->computeDistanceTo(v1) > this->computeDistanceTo(v2);
          });
}

如果使用旧的C++,则必须定义函子对象,它将存储指针引用顶点,或者使用boost中的lambda表达式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24969559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档