list-unique

////////////////////////////////////////
//      2018/04/27 16:45:26
//      list-unique

// removes duplicate elements
#include <iostream>
#include <list>
#include <algorithm>
#include <iomanip>
#include <string>

using namespace std;

template<class T>
class Member
{
private:
    T last_n, first_n;
public:
    Member(T f, T l) :first_n(f), last_n(l){}
    void print();

    // for sort function
    friend bool operator < (Member& m1, Member& m2){
        return m1.last_n <  m2.last_n;
    }

    // for merge and unqiue functions
    friend bool operator == (Member& m1, Member& m2){
        return m1.last_n == m2.last_n;
    }
};
//--------------------------
template<class T>
void Member<T>::print(){
    cout.setf(ios::left);
    cout << setw(15) << last_n <<" "<< first_n << endl;
}
typedef Member<string> M;

//========================

int main(){
    list<M> li1;
    li1.push_back(M("Linda", "Smith"));
    li1.push_back(M("Robert","Frost"));
    li1.push_back(M("Alex", "Amstrong"));

    list<M> li2;
    li2.push_back(M("Linda","Smith"));
    li2.push_back(M("John","Wood"));
    li2.push_back(M("Alex","Amstrong"));


    li1.sort();
    li2.sort();
    li1.merge(li2);

    cout << "li1 after sorting and mergin" << endl;

    list<M>::iterator it = li1.begin();
    while (it != li1.end()){
        (it++)->print();
    }
    cout << endl;

    li1.sort();
    li1.unique();

    cout << "After li1.unique()" << endl;

    it = li1.begin();
    while (it != li1.end()){
        (it++)->print();
    }
    cout << endl;
    return 0;
}

/*
OUTPUT:
    li1 after sorting and mergin
    Amstrong        Alex
    Amstrong        Alex
    Frost           Robert
    Smith           Linda
    Smith           Linda
    Wood            John

    After li1.unique()
    Amstrong        Alex
    Frost           Robert
    Smith           Linda
    Wood            John
*/ 
posted @ 2018-04-27 17:12  老耗子  阅读(53)  评论(0编辑  收藏  举报