天天看点

c++ STL Map 用法 小于号重载和仿函数定义

// STLTest2.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <stdlib.h>    // Need random(), srandom()

#include <time.h>      // Need time()

#include <string>

#include <iostream>

#include <iterator>

#include <algorithm>

#include <deque>

#include <list>

#include <vector>

#include <functional> // Need ptr_fun()

#include <map>

#include <stack>

#include <set>

using namespace std;

typedef struct tagEmployeeInfo

{

    int      nID;

    string   strName;

 bool operator < (tagEmployeeInfo const& _A) const

    {

        //这个函数指定排序策略,按nID排序,如果nID相等的话,按strName排序

        if(nID < _A.nID)  return true;

        if(nID == _A.nID) return strName.compare(_A.strName) < 0;

        return false;

    }

}EmployeeInfo, *PEmployeeInfo;  //职员信息

//仿函数

class ESort

{

    public:

    bool operator() (EmployeeInfo const &_A, EmployeeInfo const &_B) const

    {

            if(_A.nID < _B.nID) return true;

            if(_A.nID == _B.nID) return _A.strName.compare(_B.strName) < 0;

            return false;

    }

};

int _tmain(int argc, _TCHAR* argv[])

{

 int nSize;

 //用职员信息映射分数

 map<EmployeeInfo, int>mapEmployee;

 map<EmployeeInfo, int>::iterator iter;

 EmployeeInfo employeeInfo;

 employeeInfo.nID = 1;

 employeeInfo.strName = "jiayp";

 mapEmployee.insert(pair<EmployeeInfo, int>(employeeInfo, 90));

 employeeInfo.nID = 2;

 employeeInfo.strName = "cdh";

 mapEmployee.insert(pair<EmployeeInfo, int>(employeeInfo, 80));

 for (iter=mapEmployee.begin(); iter!=mapEmployee.end(); iter++)

 {

     cout<<iter->first.nID<<endl<<iter->first.strName<<endl<<iter->second<<endl;

 }

 //利用仿函数

 //map<EmployeeInfo, int,ESort>mapEmployee;

 employeeInfo.nID = 1;

 employeeInfo.strName = "jiayp";

    mapEmployee.insert(pair<EmployeeInfo, int>(employeeInfo, 90));

 employeeInfo.nID = 2;

 employeeInfo.strName = "cdh";

 mapEmployee.insert(pair<EmployeeInfo, int>(employeeInfo, 80));

 for (iter=mapEmployee.begin(); iter!=mapEmployee.end(); iter++)

 {

     cout<<iter->first.nID<<endl<<iter->first.strName<<endl<<iter->second<<endl;

 }

 int k;

 cin>>k;

 return 0;

}