gpt4 book ai didi

c++ - 根据 C++ 中 pair 的第一个 vector 排序

转载 作者:搜寻专家 更新时间:2023-10-31 02:24:11 25 4
gpt4 key购买 nike

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

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

现在我想根据对的第一个 vector 对 vector “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 的第一个元素(并且使用 operator< 中的 std::vector )

#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 << "}},";
}
}

Live Example使用 C++14。

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

关于c++ - 根据 C++ 中 pair 的第一个 vector 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28363778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com