0

こんにちは私はソート前にストアインデックスにこのコードを使用しますが、この行にコンパイルすると::

    [&](size_t a, size_t b){ return values[a] < values[b]; }

、私にエラーを言います:

        Multiple markers at this line
- expected primary-expression before 
 '[' token
- expected primary-expression before 
 ']' token
- expected primary-expression before 
 'a'
- expected primary-expression before 
 'b'

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

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

);
return indices;
 }

そして2番目の質問は、古典的な入力1D配列がある場合、この呼び出しをどのように行うことができますか

4

1 に答える 1

2

この[...](...) { ... }構文は、C++11 の機能であるラムダ式です。それらをサポートするコンパイラを使用していることを確認する必要があります。一部のコンパイラは、C++ 機能を有効にするスイッチを提供します ( -std=c++0xGCC 用)。

std::sort通常の配列で使用する場合は、次を使用します。

std::sort(array, array + array_size, comp);

または、コンテナーを使用しているか配列を使用しているかについて、コードに依存しないようにすることもできます。ac配列またはコンテナーはどこにありますか:

std::sort(std::begin(ac), std::end(ac), comp);
于 2013-02-19T17:39:53.607 に答える