【问题标题】:Comparing Items in QList qt5.3比较 QList qt5.3 中的项目
【发布时间】:2014-06-19 12:21:32
【问题描述】:

我正在尝试比较 QList 中的项目。 这是使用 QPtrCollection 的旧方法,但这不能在 qt3 之后的版本中使用(据我所知)。

class gnyComponentList:public QList<gnyComponent>
{
protected:
    virtual int compareItems ( QPtrCollection::Item item1, QPtrCollection::Item item2 )
    { return (((gnyComponent *)item1)->getID()).compare(((gnyComponent *)item2)->getID());}
};

我不知道在 Qt5.3 中这样做的好方法是什么?

【问题讨论】:

    标签: c++ qt compare qlist


    【解决方案1】:

    您可以对QList 对象使用std::equal 算法,如下所示:

    #include <QList>
    #include <QString>
    
    #include <algorithm> // for std::equal
    
    struct Person
    {
        QString firstName;
        QString lastName;
    };
    
    int main()
    {
        QList<Person> personsA, personsB;
        // Populate personsA and personsB
        bool equal = std::equal( personsA.begin(), personsA.end(),
                                 personsB.begin(),
                                 []( const Person &a, const Person & b ) {
                                    return a.firstName == b.firstName;
                                 } );
    }
    

    【讨论】:

    • 我会通过什么来代替 QPtrCollection::Item item1, QPtrCollection::Item item2 来执行此操作?
    【解决方案2】:

    这是一个简单的方法,它比较每个项目而不进行排序。 这是代码。

    bool TeachTab::isTwoStringListEqual(const QStringList &dst,
                                    const QStringList &src) {
      if (dst.size() != src.size())
        return false;
      for (int i = 0; i < dst.size(); ++i) {
        if (dst.value(i) != src.value(i)) {
          return false;
        }
      }
      return true;
    }
    

    【讨论】:

    • 比较两个空列表会发生什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2023-03-29
    相关资源
    最近更新 更多