2015-10-06 4 views
0

Я новичок в программировании. В последнее время я пытаюсь использовать функцию сортировки из c++ sort keeping track of indicesожидаемое выражение перед '['

template <typename T> 
std::vector<size_t> ordered(std::vector<T> const& values) { 
std::vector<size_t> indices(values.size()); 
std::iota(begin(indices), end(indices), static_cast<size_t>(0)); 

std::sort(
    begin(indices), end(indices), 
    [&](size_t a, size_t b) { return values[a] < values[b]; } 
); 
return indices; 
} 

В Xcode, он успешно компилируется без каких-либо предупреждений. В то время как в g ++ отображается следующее сообщение об ошибке:

error: expected expression 
      [&](size_t a, size_t b) { return values[a] < values[b];} 
     ^

Что это означает? Благодаря!

+1

Как вы используете g ++? – melak47

ответ

2

begin и end находятся в пространстве имен std. Вы должны квалифицировать их:

std::sort(
    std::begin(indices), std::end(indices), 
    [&](size_t a, size_t b) { return values[a] < values[b]; } 
); 

Также lambdas являются функция С ++ 11, так что вы должны компилировать с -std=c++11 использовать их.

Смежные вопросы