2013-02-19 73 views
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; 
} 

而第二個問題我怎樣才能這個呼叫,當我有經典輸入1D陣列

+2

看來你的編譯器不支持C++ 11(lambda表達式),或者你還沒有通過其相應的開關(如'-std = C++用於GCC的0x或'-std = C++ 11')。 – Angew 2013-02-19 17:39:05

回答

2

[...](...) { ... }語法是λ表達式中,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); 
+0

我把cygwin的GCC -std = C++ 11,這說:沒有輸入文件 – user1993285 2013-02-19 18:36:43

+0

那麼你需要給它一個文件來編譯(和使用'G ++'),當然。 'g ++ -std = C++ 0x file.cpp' – 2013-02-19 18:37:13