c++ - 在 C++ 中对 vector 的 vector 进行排序

标签 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 的一对 vector 中的第一个 vector 进行排序。例如,我从 A 的一对 vector 中得到的第一个 vector 是:

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

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

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

最佳答案

基本上,您想要做的是:

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

关于c++ - 在 C++ 中对 vector 的 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28469335/

相关文章:

c++ - Boost::signal 内存访问错误

algorithm - 插入排序 - 最佳/平均分析

algorithm - 在线性时间内排序?

c++ - 初始化和设置一个 vector<int>

c++ - 在使用矩阵进行计算时删除 C++ 二维 vector 行

c++ - 如何在不使用动画的情况下停止 QGraphicsObject 的对象?

r - Spearman 与底座 R 的尺距距离

c++ - 选择排序循环中的错误

c++ - 使用 dll 库时,是否需要包含用于构建 dll 的所有头文件?

sorting - CUDA 推力排序或 CUB::DeviceRadixSort