我正在阅读 Stroustrup 的关于 C++ 的博客 (http://isocpp.org/blog/2014/12/myths-3),期间发现了一段有趣的代码:
void do_my_sort(vector<double>& v)
{
sort(v,[](double x, double y) { return x>y; }); // sort v in decreasing order
}
int main()
{
vector<double> vd;
// ... fill vd ...
do_my_sort(v);
// ...
}
请注意,
sort
没有使用传统的sort(v.begin(), v.end(), ...)
,Stroustrup解释道:
然而,我在我的C++11编译器上尝试了相同的代码,但它无法编译。 我还在ideone上尝试了相同的代码,使用了C++14编译器,但它也无法编译,提示没有匹配的调用我使用了一个容器版本的
sort()
来避免明确定义迭代器。
sort
。为什么会这样呢?
此外,Stroustrup接下来提到:
我在C++11中也像我可以进一步使用C++14比较对象:
sort(v,greater<>()); // 以递减顺序排序v
sort
一样使用了类似于great<>()
的比较器。为什么他说这是C++14比较对象?