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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值