泛型算法:判断序列相等算法equal()

equal()算法用来比较两个序列是否相等

equal(序列1首元素迭代器,序列1尾元素后面的位置的迭代器,序列2首元素迭代器)

序列1和序列2可以是不同类型的序列。比较的前提是元素可以使用“==”比较,对于自定义的数据,必须重载“==运算符”。

struct ceshi
{
    int frist = 0;
    int second = 0;
    bool operator==(const ceshi &b) const
    {
        if(b.frist == this->frist && b.second == this->second)
            return true;
        return false;
    }
};

自定义一个结构体,重载“==”运算符,当该结构体对象的frist和second都相等时才认为两个对象是相等的。

    std::list<ceshi> list1;
    QList<ceshi> list2;

    ceshi c1;
    c1.frist = 10;
    c1.second = 20;
    list1.push_back(c1);
    list2 << c1;

    ceshi c2;
    c2.frist = 30;
    c2.second = 40;
    list1.push_back(c2);
    list2 << c2;

    ceshi c3;
    c3.frist = 50;
    c3.second = 60;
    list1.push_back(c3);
    list2 << c3;

    bool result = std::equal(std::begin(list1),std::end(list1),std::begin(list2));
    qDebug()<<result;

用一个标准库的list和一个qt的list分别储存相同的数据,比较两个list的结果是相等。

分别存一个不同是数据,结果变成不相等:

再举个例子:

    std::list<ceshi> list1;
    QMap<int,ceshi> map;
    ceshi c1;
    c1.frist = 10;
    c1.second = 20;
    list1.push_back(c1);
    map.insert(1,c1);

    ceshi c2;
    c2.frist = 30;
    c2.second = 40;
    list1.push_back(c2);
    map.insert(2,c2);

    ceshi c3;
    c3.frist = 50;
    c3.second = 60;
    list1.push_back(c3);
    map.insert(3,c3);

    ceshi c5;
    c5.frist = 90;
    c5.second = 100;
    list1.push_back(c5);

    ceshi c6;
    c6.frist = 110;
    c6.second = 120;
    list1.push_back(c6);

    bool result = std::equal(std::begin(list1),std::end(list1),std::begin(map));
    qDebug()<<result;

 std::list和QMap也能比较,实际上是std::list和QMap的每个元素的value比较。

注意:

1、第二个序列中元素的个数不能少于第一个序列中元素的个数,否则程序会报错。标准库中像这样第二个序列只用一个迭代器表示的算法都有这样的要求

2、假如第1个序列中的元素个数少于第2个序列中元素个数,且第一个序列中的元素全部和第二个序列中元素相同(序列1是序列2的真子集),那么比较结果也是true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值