【发布时间】:2014-04-08 14:31:10
【问题描述】:
我有以下字符串对象的比较器
struct Comparator{
int x;
bool operator() (string a, string b) {
int i = 1;
if(a < b) {
i = -1;
}
i*= x;
if(i==-1) {
return true;
}
return false;
}
};
如你所见,它有一个参数x。为=1时字符串比较正常,=-1时反相比较。
当在sort 之类的方法中为vector 元素使用它时,我可以用正确的x 给这个比较器的对象实例,但是当我想把这个比较器给像set 这样的模板类时,我需要给一个类而不是一个对象实例。所以我看到的唯一解决方案是将x 设为静态。有没有更好的解决方案?
这是我想使用此比较器的主要示例:
int main(int argc, char** argv)
{
vector<string> vec;
vec.push_back("c");
vec.push_back("a");
vec.push_back("b");
Comparator comp;
comp.x = 1; // for normal comparison
comp.x = -1; // for inverse comparison
sort(vec.begin(),vec.end(), comp); // here I can give the functor instance
for(vector<string>::iterator it = vec.begin() ; it != vec.end(); it++)
{
cout << *it << endl;
}
set<string, Comparator> ss; // but here I must give the name of the functor class
ss.insert("c");
ss.insert("a");
ss.insert("b");
for(set<string>::iterator it = ss.begin() ; it != ss.end(); it++)
{
cout << *it << endl;
}
return 0;
}
【问题讨论】: