函数调用运算符重载(关于地图容器的自定义排序)

函数调用运算符重载(关于map容器的自定义排序)
//bool operator () (const char *st1, const char *  st2) const  //函数调用运算符重载这里看不明白,求详细解释
#include<iostream>
#include <map>
//#include<string>
#include<string.h>
using namespace std;
class sort
{
public:

bool operator () (const char *st1, const char *  st2) const  //这里不懂,求详解
{
if (strcmp(st2,st1)>0)
return 1;
else
return 0;
}
};
typedef map<const char *,int,sort> MAP;
void show(MAP map1)
{
    MAP::iterator it;
for(it = map1.begin(); it != map1.end(); it++)
{
    cout<<(*it).first<<" -- "<<(*it).second<<endl;
}
cout<<endl;
}
int main()
{
MAP map1;
pair<MAP::iterator, bool> pair1;
pair1 = map1.insert(MAP::value_type("january",31));//1
pair1 = map1.insert(MAP::value_type("february",28));//2
pair1 = map1.insert(MAP::value_type("march",31));//3
pair1 = map1.insert(MAP::value_type("april",30));//4
pair1 = map1.insert(MAP::value_type("may",31));//5
pair1 = map1.insert(MAP::value_type("june",30));//6
pair1 = map1.insert(MAP::value_type("july",31));//7
pair1 = map1.insert(MAP::value_type("august",31));//8
pair1 = map1.insert(MAP::value_type("september",30));//9
pair1 = map1.insert(MAP::value_type("october",31));//10
pair1 = map1.insert(MAP::value_type("november",30));//11
pair1 = map1.insert(MAP::value_type("december",31));//12
show(map1);
return 0;
}

------解决方案--------------------
bool operator () (const char *st1, const char *  st2) const  //这里不懂,求详解
{
if (strcmp(st2,st1)>0)
return 1;
else
return 0;
}
};


map 要用到的key的比较函数。
map 内存放的是<key, value> 这样的数据形式,
这些数据以key为关键字,按顺序存放,通过key达到快速查找插入数据的目的。
既然数据由顺序,就有比较,哪个先,哪个后,因为key的类型是用户自己定义的,
所以需要用户自己定义key应该怎样比较。
所以就有了上面地函数。


template < class Key, class T, class Compare = less<Key>,
           class Allocator = allocator<pair<const Key,T> > > class map;
------解决方案--------------------
因为const char *p的缺省比较操作是比较地址本身。而楼主需要的是类似strcmp的比较。
------解决方案--------------------
你可以自己定义个
class A 
{
char* m_pBuffer;
bool operator < ( char* p1, char*p2 );
}
map< A*, int>
和上面是等效的,这么说你就明白了吧,想怎么比较自己放到operator 里做就可以了。