如何对向量或队列对进行排序
How to sort a vector or deque KeyPair
我有一个deque <pair<int, int> > r;
。我需要按第二个参数排序,并返回第一个所有参数的deque<int>
。例如:
deque<pair<int, int> > r;
r.push_back(make_pair(1, 5));
r.push_back(make_pair(0, 8));
r.push_back(make_pair(7, 3));
r.push_back(make_pair(2, 1));
我需要这个结果
{2, 7, 1, 0}
我有一个工作方法,"蛮力"所有值到N2,但这是非常糟糕的。也许存在这样的std::
?我希望你能帮助我。
您只需要定义一个比较运算符来处理对中的第二项:
std::sort(r.begin(), r.end(),
[](std::pair<int, int> const &a, std::pair<int, int> const &b) {
return a.second < b.second;
}
);
…或者,如果你不能使用lambda(例如,使用太旧的编译器),你可以显式地定义你的函函数:
template <class T>
struct by_second {
bool operator()(T const &a, T const &b) {
return a.second < b.second;
}
};
std::sort(r.begin(), r.end(), by_second());
从那里,它的问题是获得每对中的第一个项目,并把它放入你的结果:
std::transform(r.begin(), r.end(), std::back_inserter(result),
[](std::pair<int, int> const &p) { return p.first; });
您可以使用std::sort
并提供您自己的比较器:
struct myclass {
bool operator() (std::pair<int, int> i, std::pair<int, int> j) {
return (i.second < j.second);
}
} myobject;
std::sort(r.begin(), r.end(), myobject);
我没有特别尝试过deque
,但这通常是如何做到的。这个链接有一个更完整的例子:-)
相关文章:
- 使用2个键的cpp-stl::优先级队列排序不正确
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 更改运行时优先级队列的排序功能
- 内存排序在提升::无锁:队列
- 优先级队列未正确排序
- 排序函数和优先级队列 C++ 中的比较器
- 如何检查队列是否使用 STL 排序
- 对字符串队列进行排序
- C++ 中优先级队列的结构排序条件
- 队列快速排序不排序和打印随机字符串[C ]
- 相同的比较功能为C++中的排序和优先级队列提供不同的输出
- 有效地添加到排序的队列中
- 排序结构的队列
- 我如何在队列中排序元素
- 根据此条件对队列进行排序
- 将添加到队列的第一个元素作为 null 进行排序
- 推送到排序队列实现
- 为什么我的基本优先级队列排序算法会导致 seg 错误
- 优先队列排序[c++]
- 优先级队列排序指针指向改变值的对象.c++