在c++中定义了一个谓词函数:compare,用在sort函数中。但如果我将compare写在主函数中,在编译阶段编译器(我用的是VS2010)会报错,提示
error C2601: “compare”: 本地函数定义是非法的。
将函数定义在外部就运行正常。
想问一下这是为什么。
错误程序如下:
#include <iostream>#include <map>#include <string>#include <vector>#include <algorithm>using namespace std;//typedef map<string, int>::const_iterator map_it;//定义谓词//bool compare(const map_it& lit,const map_it& rit){// return lit->second < rit->second;// }int main(){
string s;
map<string, int> counters;
typedef map<string, int>::const_iterator map_it; bool compare(const map_it& lit,const map_it& rit){ return lit->second < rit->second;
} while(cin >> s){
++counters[s];
}
//将map iterator存入vector,进行排序
vector<map_it> itvec; for(map_it it = counters.begin(); it != counters.end(); ++it){
itvec.push_back(it);
} sort(itvec.begin(),itvec.end(),compare); for(vector<map_it>::const_iterator vit = itvec.begin(); vit != itvec.end(); ++vit)
{
cout<<(*vit)->first<<" occurs "<<(*vit)->second<<" times"<<endl;
} return 0;
}
www说
随时随地看视频
C++