2011-07-12 75 views
1

好的,我有vector< vector <long>>,我想排序從最小到最大的最內層向量 - 即我排序時排序vector <long>看起來像3,7,21。C++矢量排序簡單地

這已被問過,但我想這樣做很簡單,以便非程序員可以理解。我見過我可以創建一個函數或仿函數來排序as in this question.有沒有辦法做到這一點,而無需創建額外的排序功能?我正在做這個課程的一部分,我希望有一種方法可以做到這一點,而不必讓人們爲我的代碼尋找簡單的排序功能。

一種可能性是可能有某種方法來定義類函數內的排序函數,但在C++中可能不允許這樣做。

回到關鍵點:我已經看到了幾種方法來做到這一點,我想知道最簡單的方法是什麼排序一個整數向量。任何幫助非常感謝,因爲這可能會比看起來更有幫助。

回答

2

如果你想只有內部向量排序,那麼你可以使用默認的排序順序:

#include <algorithm> 
#include <vector> 
using namespace std; 

int main() 
{ 
    vector<vector<long>> v; 
    for (auto i = v.begin(); i != v.end(); ++i) 
     sort(i->begin(), i->end()); 
    return 0; 
} 

這個例子使用了最新版本的標準。較老的C++編譯器的例子會稍微冗長些。

+0

不應該被標記爲C++ 0x或標記爲錯誤,因爲它不嚴格C++? – Jay

+1

C++ 0x如何不嚴格C++?這是標準。 :)另外,它不影響排序。我只需寫出迭代器類型並在尖括號之間放置一個空格。 –

3

std :: sort函數使用std::less<T>函數進行默認排序。要獲得相反的順序,請明確使用std::greater<T>函數。

我只是使用循環來通過外部向量,然後分別排序每個內部向量。除非我誤解了這個問題。

2

您不能在C++ 03中直接定義函數。 GCC和MSVC的最新版本支持C++ 0x lambda函數,您可以將其用於此目的。

2

我想這應該是八九不離十

#include <vector> 
#include <algorithm> 

std::vector< std::vector <long>> list; 

std::vector< std::vector <long>>::iterator i; 
for (i = list.begin(); i != list.end(); ++i) 
    std::sort((*i).begin(), (*i).end());