2015-02-12 112 views
4

我有以下的數據結構:排序矢量

std::vector<std::pair <std::vector<unsigned>,std::vector<unsigned> > > A; 

含有以下數據:

((7),(108,109)), 
((3),(100,101)), 
((9),(111,112)), 
((5),(102,103)), 
((8),(110)), 
((8,2,10),(189)), 
((5,7),(121)), 
((3,9),(119)), 
((10),(114)), 
((3,5),(115)), 
((3,7),(118)), 
((3,10),(120)), 
((3,4,5),(122)) 

現在我想的排序僅從對向量的第一向量A以下列方式。例如,我的從所述一對A的向量的第一向量是:

(7), 
(3), 
(9), 
(5), 
(8), 
(8,2,10), 
(5,7), 
(3,9), 
(10), 
(3,5), 
(3,7), 
(3,10), 
(3,4,5) 

我想,根據所述第一矢量,使得在最終排序我的向量變爲排序:

((3),(100,101)), 
((5),(102,103)), 
((7),(108,109)), 
((8),(110)), 
((9),(111,112)), 
((10),(114)), 
((3,5),(115)), 
((3,7),(118)), 
((3,9),(119)), 
((3,10),(120)), 
((5,7),(121)), 
((3,4,5),(122)), 
**((2,8,10),(189)).** 

我知道如何使用std向量進行排序:排序,但我不知道如何使用標準的C++函數向量的向量進行排序。我試圖按大小對它們進行排序,然後使用bublee進行最後的排序。有沒有其他方法來使用標準庫函數在C++中對這些向量進行排序。我使用的克++編譯器(克++(Ubuntu的/ Linaro的4.6.3-1ubuntu5)4.6.3)在Ubuntu 12.04運行的C++。

+0

噢,對不起那麼很可能我誤解了這個詞的含義字典序 – 2015-02-12 04:53:49

+0

沒問題 - 我只是想確保你的問題是顯而易見的。你可以編輯這個問題,雖然我沒有一個好的術語來描述你所描述的那種。 – 2015-02-12 04:54:52

回答

6

基本上,你想要做的是:

  1. 首先排序第一vector的大小在pair<>
  2. 然後按字典排序vectors

你必須寫這個你自己的比較器功能。

代碼:

bool mySort(const pair<vector<unsigned>,vector<unsigned> > &a , const pair<vector<unsigned>,vector<unsigned> > &b) 
{ 
    if (a.first.size() == b.first.size()) { 
     //If sizes of the vectors are equal 
     //Sort the graph lexicographically. 
     return std::lexicographical_compare(a.first.begin(),a.first.end(),b.first.begin(),b.first.end());pair<vector<unsigned>,vector<unsigned> > a 
    } else { 
     //Sort by size. 
     return a.first.size() < b.first.size(); 
    } 
} 
int main() 
{ 
    std::vector<std::pair<std::vector<unsigned>,std::vector<unsigned> > > a; 
    std::sort(a.begin(),a.end(),mySort); 
}