2015-02-12 91 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); 
}