NoS*_*tAl 1 c++ comparator custom-compare
这可能听起来像一个愚蠢的问题,但我想知道很长一段时间有一个更好的方法:
struct X
{
int a;
int b;
};
bool sortComp(const X first, const X second)
{
if (first.a!=second.a)
return (first.a<second.a);
else
return (first.b<second.b);
}
class setComp
{
public:
bool operator() (const X first, const X second) const
{
if (first.a!=second.a)
return (first.a<second.a);
else
return (first.b<second.b);
}
};
int main()
{
vector<X> v;
set<X, setComp> s;
sort(begin(v), end(v),sortComp);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我实现了两次相同的功能,一次用于排序,一次用于集合中的隐式排序.有没有办法避免代码重复?
当然,只需选择其中一个并更改另一个的呼叫.
// choosing the function object
sort(begin(v), end(v), setComp()); // create setComp, sort will call operator()
// choosing the function
set<X, bool(*)(const X, const X)> s(sortComp); // pass function pointer
Run Code Online (Sandbox Code Playgroud)
我个人会推荐仿函数版本.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |