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;
 }

第二个问题,当我有经典的输入一维数组时,我该如何调用?

4

1 回答 1

2

[...](...) { ... }语法是 lambda 表达式,是 C++11 的一个特性。您需要确保您使用的是支持它们的编译器。一些编译器提供了一个开关来启用 C++ 功能(-std=c++0x对于 GCC)。

如果要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 回答