您好我在排序之前将此代码用于我的商店索引,但是当我在此行中进行COmpile时: :
[&](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;
}
第二个问题,当我有经典输入1d数组
时,我怎么称呼这个答案 0 :(得分:2)
这个[...](...) { ... }
语法是一个lambda表达式,是C ++ 11的一个特性。您需要确保使用支持它们的编译器。一些编译器提供了一个开关来启用C ++功能(GCC为-std=c++0x
)。
如果要在普通数组上使用std::sort
,请使用:
std::sort(array, array + array_size, comp);
或者,您可以使代码不知道您是使用容器还是数组。 ac
是数组或容器的位置:
std::sort(std::begin(ac), std::end(ac), comp);