在c ++中对向量的向量进行排序

时间:2015-02-12 04:31:22

标签: c++ sorting vector

我有以下数据结构:

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)

我想根据第一个向量对A进行排序,这样在最终排序后,我的向量变为:

((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:sort对矢量进行排序,但我不确定如何使用标准c ++函数对矢量矢量进行排序。我尝试先按大小对它们进行排序,然后使用bublee排序进行最终排序。是否有其他方法使用标准库函数在c ++中对这些向量进行排序。我正在使用g ++编译器(g ++(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3)在ubuntu 12.04上运行C ++。

1 个答案:

答案 0 :(得分:6)

基本上,你想要做的是:

  1. 首先排序vector中第一个pair<>的大小排序。
  2. 然后按字典顺序排序 vectors
  3. 你必须为此编写自己的比较器功能。

    代码:

    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);
    }