函数中定义函数是非法的,你可以:
- 将函数定义在外部;
- 在函数中,定义一个Functor (需要在函数中定义一个接口体或类, 其实属于扩展语法,但是主流编译器都支持);
- 使用lambda (C++11, VS2010要打上SP1补丁)。
使用Functor:
struct {
bool operator() (const map_it& lit, const map_it& rit) {
return lit->second < rit->second;
}
} compare;
使用lambda:
auto compare = [] (const map_it& lit, const map_it& rit) -> bool {
return lit->second < rit->second;
};
PS: 可以简写为:
auto compare = [] (const map_it& lit, const map_it& rit) {
return lit->second < rit->second;
};
PPS:如果谓词函数其它地方用不上,并且谓词函数很简短:
sort(itvec.begin(), itvec.end(), [] (const map_it& lit, const map_it& rit) {
return lit->second < rit->second;
});
若对C++11的lambda感兴趣,请利用搜索引擎获取更多知识。
如果你想让程序有更好的兼容性,推荐使用Functor方式。