根据 C++ 中 pair 的第一个向量排序
Sort according to first vector of pair in C++
我有以下形式的数据结构:
vector<pair<vector<unsigned>,vector<unsigned> > a;
现在我想根据对的第一个向量对向量 "a" 进行排序。例如。在下面给出的示例中,我想根据以下内容进行排名:
(((1,2,4),(89,29)) , ((1,3),(67,90))).
由于a3的size大于a1的size,所以先按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
与比较每个 pair
的第一个元素(并使用 std::vector
中的 operator<
的函数对象(此处为 lambda)一起使用
#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 及更高版本中更方便的初始化列表。
我有以下形式的数据结构:
vector<pair<vector<unsigned>,vector<unsigned> > a;
现在我想根据对的第一个向量对向量 "a" 进行排序。例如。在下面给出的示例中,我想根据以下内容进行排名:
(((1,2,4),(89,29)) , ((1,3),(67,90))).
由于a3的size大于a1的size,所以先按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
与比较每个 pair
的第一个元素(并使用 std::vector
中的 operator<
的函数对象(此处为 lambda)一起使用
#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 及更高版本中更方便的初始化列表。