首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++中向量的排序

c++中向量的排序
EN

Stack Overflow用户
提问于 2015-02-12 04:31:22
回答 1查看 549关注 0票数 4

我有以下数据结构:

代码语言:javascript
复制
std::vector<std::pair <std::vector<unsigned>,std::vector<unsigned> > > A;

载有下列数据:

代码语言:javascript
复制
((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对向量中的第一个向量是:

代码语言:javascript
复制
(7),
(3),
(9),
(5),
(8),
(8,2,10),
(5,7),
(3,9),
(10),
(3,5),
(3,7),
(3,10),
(3,4,5)

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

代码语言:javascript
复制
((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++中使用标准库函数对这些向量进行排序。我使用C++编译器在ubuntu12.04上运行g++ (g++( ubuntu /Linaro4.6.3-1ubuntu5) 4.6.3)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-12 04:57:08

基本上,你想做的是:

  1. 按照pair<>中第一个pair<>的大小进行第一次排序。
  2. 然后按字典顺序对vectors进行排序。

为此,您必须编写自己的比较器函数。

代码:

代码语言:javascript
复制
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);
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28469335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档