2016-10-24 42 views
-3

我想是不同的,例如,如果我有一個我如何使用std ::排序

vector v = { 
      {5, 3, 1, 2}, 
      {10, 1}, 
      {3, 2, 1}, 
      {4, 3, 2, 0} 
} 


final vector = { {1, 2, 3, 5}, 
       {1, 10}, 
       {1, 2, 3}, 
       {0, 2, 3, 4} 
} 
向量按行,每行的大小的元素排序按行向量的元素

如何使用std :: sort函數執行此操作?

這是我到目前爲止嘗試過的。

vector< vector<int> > v; 
for(int i = 0; i < n; i++){ 
    sort(&v[i][i], &v[i][i] + n*m, less<int>()); 
} 
+0

你是什麼意思按行?它是矢量矢量嗎? – Banex

+0

是的,它是矢量的矢量。 –

+0

到目前爲止您嘗試了什麼? – user2079303

回答

1

你應該使用std::vector<std::vector<int>>來保存數據。我們假設這個改變已經完成了。

您的最終目標是對外部向量中的每個向量進行排序。這對std::sort來說非常簡單。

如果您想在原地進行此操作,只需在for循環內的向量中對每個向量進行排序即可。

std::vector<std::vector<int>> vs = { 
    {5, 3, 1, 2}, 
    {10, 1}, 
    {3, 2, 1}, 
    {4, 3, 2, 0} 
}; 

for(auto& v: vs) { 
    std::sort(v.begin(), v.end()); 
} 

Ideone it

類似地,但可讀性差得多,是使用std::for_eachstd::sort應用於外部向量中的每個元素。

該方法包含ideone,但我謹慎使用上面較爲詳細和更具可讀性的版本。

0

試試這個:

for (auto& items:v) 
std::sort(items.begin(),items.end(),[](int lhs,int rhs) { return lhs<rhs; }); 
+3

默認情況下,您可以刪除lambda:'std :: sort'使用'operator <'。 – Quentin

+0

@Quentin:同意,只是爲了清晰起見,或者也可以按降序排序 – seccpur

+1

@seccpur爲降序,'std :: greater'會比lambda更簡潔。 – user2079303