STL向量排序
STL Vector sort
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct point{
int index;
int x;
int y;
};
以x为基数比较,以y为基数打破平局!!
bool comp1(const point& p1,const point& p2){
if(p1.x<p2.x)
return true;
if(p1.x==p2.x){
if(p1.y<p2.y)
return true;
return false;
}
return true;
}
以y为基数比较,以x为基数打破平局!!
bool comp2(const point &p1,const point &p2){
if(p1.y<p2.y)
return true;
if(p1.y==p2.y){
if(p1.x<p2.x)
return true;
}
return false;
}
int main() {
int n;
vector<point> px,py;
cin>>n;
point p;
for(int i=0;i<n;i++){
cin>>p.x>>p.y;
p.index = i+1;
px.push_back(p);
py.push_back(p);
}
sort(px.begin(),px.end(),comp1);
sort(py.begin(),py.end(),comp2);
vector<point>::iterator it;
for(it=px.begin();it!=px.end();it++)
cout<<it->x<<" "<<it->y<<"t";
cout<<endl;
for(it=py.begin();it!=py.end();it++)
cout<<it->x<<" "<<it->y<<"t ";
cout<<endl;
return 0;
}
上面的代码产生了模棱两可的结果。我试图在增加x的基础上排序点,而不是增加y,反之亦然。
您可以通过使用std::pair()
的内置operator<
来简化逻辑,它可以进行字典比较:
bool comp1(const point& p1,const point& p2){
return std::make_pair(p1.x, p1.y) < std::make_pair(p2.x, p2.y);
}
// swap x and y order for comp2
bool comp2(const point& p1,const point& p2){
return std::make_pair(p1.y, p1.x) < std::make_pair(p2.y, p2.x);
}
相关文章:
- 计算排序向量的向量中唯一值的计数
- 查找两个排序向量中共有的元素
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 如何从C++的对的排序向量中获取有关给定值的相应对
- 对象接收堆栈溢出异常 c++ 的排序向量
- "x"的所有元素都存在于"y"(排序向量)中吗?
- 指向指针排序向量的指针向量的 C++ 向量
- 未排序向量上的lower_bound/upper_bound
- 智能指针的排序向量:神秘崩溃
- 按类型排序向量并按类型或派生类型搜索
- 如何在不使用标准算法的情况下在排序向量中添加 c 元素?
- C++排序向量<double>与在<Object>双成员变量上键控的向量
- 字符串指针的排序向量
- 具有前导数字的字符串的排序向量
- 保证重新排序向量
- 结构解释的C 排序向量
- 更新排序向量的一个条目
- 通过在排序向量上使用二叉搜索来定位未排序向量中的元素
- 排序向量上 std::find_if 和 std::bind2nd 的替代品
- 使用QuickSort算法以降序排序向量