1. 程式人生 > 其它 >泛型演算法:比較兩個序列匹配演算法mismatch()

泛型演算法:比較兩個序列匹配演算法mismatch()

技術標籤:c++標準庫中的演算法

equal()演算法也能判斷兩個序列是否相等,不過只能判斷是否相等不能獲取不相等的位置。泛型演算法:判斷序列相等演算法equal()

mismatch()進行兩個序列比較,返回pair的值分情況是不同的:

1、兩個序列的值不匹配:pair的first是序列1的第一個不匹配的元素,second是序列2的第一個不匹配的元素:

    QStringList list1;
    list1<<"aa"<<"bb"<<"cc"<<"dd"<<"aa"<<"ab"<<"ac"<<"bb"<<"cc"<<"dd"<<"aa";
    QStringList list2;
    list2<<"aa"<<"cc"<<"tt";

    std::pair<QStringList::iterator,QStringList::iterator> result = std::mismatch(list1.begin(),list1.end(),list2.begin());
    qDebug()<< *result.first<<*result.second;

2、兩個序列相等,返回的是兩個序列的尾迭代器(如果是整個序列參與比較):

    QStringList list2;
    list2<<"aa"<<"cc"<<"tt";

    QStringList list3;
    list3<<"aa"<<"cc"<<"tt";
    
    auto result2 = std::mismatch(list2.begin(),list2.end(),list3.begin());
    qDebug()<< (result2.first == list2.end()) << (result2.second == list3.end());

3、如果序列1是序列2的真子集,返回的是序列1的尾迭代器和序列2中多出來的第一個元素:

    QStringList list2;
    list2<<"aa"<<"cc"<<"tt";

    QStringList list3;
    list3<<"aa"<<"cc"<<"tt"<<"ee";

    auto result2 = std::mismatch(list2.begin(),list2.end(),list3.begin());
    qDebug()<< (result2.first == list2.end()) << (result2.second == list3.end());
    qDebug()<< (result2.first == list2.end()) << (*result2.second);

4、如果序列2是序列1的真子集,會報錯,因為演算法要求序列2的元素個數大於等於序列1的元素個數。