我想为lower_bound
,find
等函数编写自定义比较器。下面是一个自定义比较器的示例,该比较器使用带有另一个函数对象(std::less
的仿函数实现, std::greater
等)并用它来比较一对的第一个元素和函数的第二个参数。
template <template <typename> class P = std::less>
struct custom_comp {
template <class T1, class T2>
bool operator()(const std::pair<T1, T2>& pair, const T1& val)
{
return P<T1>()(pair.first, val);
}
}
用法示例:
vector<pair<int,int>> vec = {{1, 4}, {3, 3}, {5, 6}, {8, 8}};
auto first = lower_bound(begin(vec), end(vec), 5, custom_comp<>());
然而,<>()
困扰我,我觉得它带走了可读性。有办法摆脱它吗? (也许改变另一种结构的仿函数)。
答案 0 :(得分:6)
然而
<>()
困扰我
不应该。该代码没有错。有时你需要做那样的事情。它并没有真正消除可读性,它非常清楚那里发生了什么。
如果你愿意,你可以随时创建&#34;默认&#34; custom_comp
:
constexpr custom_comp<> def_custom_comp{};
然后使用它:
auto first = lower_bound(begin(vec), end(vec), 5, def_custom_comp);
你失去了<>()
,但我不确定这一点是否更容易理解。