Лямбда-выражение - это механизм указания функционального объекта.Основное использование лямбды - это указание простого действия, выполняемого какой-либо функцией.Например:
vector<int> v = {50, -10, 20, -30};
std::sort(v.begin(), v.end()); // the default sort
// now v should be { -30, -10, 20, 50 }
// sort by absolute value:
std::sort(v.begin(), v.end(), [](int a, int b) { return abs(a)<abs(b); });
// now v should be { -10, 20, -30, 50 }
Аргумент [&](int a, int b) { return abs(a)<abs(b); }
является «лямбда-выражением» (или «лямбда-функцией» или «лямбда-выражением»), который задает операцию, которая дает два целочисленных аргумента a и b, возвращает результатсравнения их абсолютных значений.
[&] - это «список захвата», указывающий, что используемые локальные имена будут переданы по ссылке.Мы могли бы сказать, что хотим «захватить» только v, мы могли бы сказать так: [& v].Если бы мы хотели передать v по значению, мы могли бы сказать так: [= v].Захватить все - это [], захватить все по ссылкам - [&], а захватить все по значению - [=].
http://www2.research.att.com/~bs/C++0xFAQ.html#lambda