根据C++中成对的第一个向量进行排序

Sort according to first vector of pair in C++

本文关键字:向量 排序 第一个 C++ 根据      更新时间:2023-10-16

我有以下形式的数据结构:

vector<pair<vector<unsigned>,vector<unsigned> > a;

现在我想根据对的第一个向量对向量"a"进行排序。例如,在下面给出的例子中,我想根据以下内容进行排名:(((1,2,4),(89,29)) , ((1,3),(67,90))).由于a3的大小大于a1的大小,因此首先根据a3进行排序,然后根据a1进行排序。

E.g. If 
     vector<unsigned> a1,a3;
     a1.push_back(1); a1.push_back(3);
     vector<unsigned> a2,a4;
     a2.push_back(67); a2.push_back(90);
     a.push_back(make_pair(a1,a2));
     a3.push_back(1); a3.push_back(2); a3.push_back(4);
     a4.push_back(89); a4.push_back(29);
     a.push_back(make_pair(a3,a4));

我知道我可以使用冒泡排序来进行排序。但是在C++中有其他类似STL函数的方法可以做到这一点吗。

只需将std::sort与一个函数对象(此处为lambda)一起使用,该函数对象比较每个pair的第一个元素(并使用来自std::vectoroperator<

#include <algorithm>
#include <iostream>
#include <utility>
#include <vector>
using namespace std;
int main()
{
    vector<pair<vector<unsigned>,vector<unsigned> >> a = {{{1,3},{67, 90}}, {{1,2,4},{89,29}}};
    sort(begin(a), end(a), [](auto const& L, auto const& R) {
        return L.first < R.first;
    });
    for (auto const& elem : a) {
        std::cout << "{{";
        for (auto const& u : elem.first)
            std::cout << u << ", ";
        std::cout << "},";
        std::cout << "{";
        for (auto const& u : elem.second)
            std::cout << u << ", ";
        std::cout << "}},";
    }    
}

使用C++14的实时示例

您可以通过使用迭代器/索引编写基于范围的for循环,并通过编写一个单独的函数对象将其传递给std::sort,将其调整为C++98。哦,您还必须使用尴尬的push_back初始化,而不是C++11及更高版本中更方便的初始化器列表。