Я читал блог Страуструп на C++ (http://isocpp.org/blog/2014/12/myths-3), когда я нашел межжала кусок кода:Container версия C++ рода
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(), ...)
который объясняет Страуструп:
Я использовал версию контейнера
sort()
, чтобы избежать явного описания итераторов .
Однако, я пробовал тот же код на моем компиляторе C++ 11, но он не компилируется. Я также пробовал то же самое на компиляторе C++ 14, используя ideone, но он тоже не компилируется, говоря, что не существует соответствующего вызова для сортировки.
Почему это?
Кроме того, Страуструп рядом упоминает:
я мог бы пойти дальше и использовать C++ 14 сравнения объекта с:
sort(v,greater<>()); // sort v in decreasing order
я использовал компараторов как great<>()
для sort
в C++ 11. Почему он заявляет, что это объект сравнения C++ 14?
Для использования зЬй :: рода, возможно, придется #include –
erenon
@erenon Я знаю, что и уже сделали это. Он по-прежнему говорит, что не существует соответствующего вызова для сортировки. – 1110101001
В стандарте нет стандартной версии контейнера, но, надеюсь, скоро: https://ericniebler.github.io/std/wg21/D4128.html – BenPope