// 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;
}