根据C++中成对的第一个向量进行排序
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的大小大于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::vector
的operator<
)
#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及更高版本中更方便的初始化器列表。
相关文章:
- 将结构向量排序为子组
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 如何在对向量排序后更改索引值?c++
- C++向量排序给出0作为输出
- 将许多向量排序在一起
- 根据一个向量对多个向量排序
- 编译错误向量排序和联合
- C++我自己的函数进行向量排序
- 将字符串的向量排序为日期"yyyymmdd"
- C++ 通过使用旧向量进行预排序来改进向量排序
- C 向量排序 .h .cpp中的单独文件
- 向量排序-c++
- 将向量排序到一个无序映射c++11中
- 向量的向量排序
- c++向量排序方法编译失败,返回预期表达式
- 如何对bitset向量排序
- 向量排序的基础上只有先
- 我如何以相同的方式对两个向量排序,而条件只使用其中一个向量
- 列表排序和结构体向量排序之间的性能差距.c++
- 如何基于第二个字符串对字符串向量的向量排序