#include <map>
#include <iostream>
using namespace std;
class Person
{
	public :
	int age;
	int ID;
	Person(int age, int id)
	{
		this->age = age;
		this->ID = id;
	}
};
struct CmpByKey {  
	bool operator()(const Person * k1, const Person * k2) {  
		return k1->age < k2->age;
   }  
};  
map<Person * , int, CmpByKey> iMap;
int main()
{
	Person  * pPerson;
	for(int i = 10; i > 0; i--)
	{
		pPerson = new Person(i, i);
		iMap.insert(pair<Person *, int>(pPerson, i));
	}
	map<Person *,int, CmpByKey>::iterator iBegin = iMap.begin();
	map<Person *,int, CmpByKey>::iterator iEnd = iMap.end();
	while(iBegin != iEnd)
	{
		cout<<iBegin->first->ID << ": ";
		cout << iBegin->first->age  <<  endl;
		iBegin++;
	}
	
	cout<<"####################"<<endl;
	
	pPerson = new Person(1, 10);
	pair<map<Person * , int, CmpByKey>::iterator, bool> Insert_Pair;
	Insert_Pair = iMap.insert(pair<Person *, int>(pPerson, 10));
	if(Insert_Pair.second == true)
    {
        cout<<"Insert Successfully"<<endl;
    }
    else
    {
        cout<<"Insert Failure"<<endl;
    }
	iBegin = iMap.begin();
	while(iBegin != iEnd)
	{
		cout<<iBegin->first->ID << ": ";
		cout << iBegin->first->age<<endl;
		iBegin++;
	}
}
原文:http://www.cnblogs.com/kisstherain/p/4292286.html