Search code examples
c++qtcompareqlist

Comparing Items in QList qt5.3


I am trying to compare the items in a QList. Here is the old way to do it using QPtrCollection but this cannot be used in versions after qt3 (as far as I'm aware).

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

I can't figure out what a good way of doing this in Qt5.3 might be?


Solution

  • You can use the std::equal algorithm on QList objects, as in:

    #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;
                                 } );
    }