簡體   English   中英

qSort()不適用於自己的比較功能

[英]qSort() doesn't work with own compare function

我想如下使用qSort()

我有一個比較功能叫做

bool CStreamSetup::compareNames(const QString &s1, const QString &s2)
{
    QString temp1 = s1.section("Stream", 1);
    temp1 = temp1.section('_', 0, 0);

    QString temp2 = s2.section("Stream", 1);
    temp2 = temp2.section('_', 0, 0);

    return (temp1.toInt() < temp2.toInt());
}

一個QStringList包含160個元素,稱為QStringList childKeys;

當我如下調用QSort函數時:

qSort(childKeys.begin(), childKeys.end(), compareNames);

出現以下錯誤。

'compareNames': non-standard syntax; use '&' to create a pointer to member
'qSort': no matching overloaded function found
'void qSort(Container &)': expects 1 arguments - 3 provided
'void qSort(RandomAccessIterator, RandomAccessIterator)' expects 2 arguments - 3 provided

感謝大伙們!

比較器不能是類的方法(類的方法需要一個為其調用的對象)。 您可以定義compareNames在靜態函數CStreamSetup類:

class CStreamSetup {
  static bool CStreamSetup::compareNames(const QString &s1, const QString &s2);
  // ^^^
}; 

compareNames的定義保持不變。

bool CStreamSetup::compareNames(const QString &s1, const QString &s2)
{
    QString temp1 = s1.section("Stream", 1);
    //...
}

或者您可以將比較器定義為自由函數:

bool compareNames(const QString &s1, const QString &s2)
{
    QString temp1 = s1.section("Stream", 1);
    //...
}

靜態功能

如果要將成員函數用作比較器,則成員函數必須為static

static bool compareNames(const QString &s1, const QString &s2);

匿名函數(lambda)

另一種方法(C ++ 11和更高版本)是使用lambda:

qSort(childKeys.begin(), childKeys.end(), [this](const QString &s1, const QString &s2) {
    return compareNames(s1, s2);
});

STL功能

旁注:根據文檔qSort已過時,Qt建議使用std::sort代替。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM