已知一组坐标点,怎么按照一定的顺序排列坐标点呢?

berlinpand 2017-11-23 04:57:44
比如我需要将这些点按照x横坐标从小到大的顺序排列,放在txt文档中,还望大家指导
...全文
691 8 点赞 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mirro 2019-06-02
先比较x坐标,再比较y坐标呢
  • 打赏
  • 举报
回复
一指禅心 2019-05-30
  • 打赏
  • 举报
回复
berlinpand 2017-11-26
引用 5 楼 ybs963 的回复:

#include <iostream>
#include <vector>
#include <fstream>
#include  <algorithm>

using namespace std;

struct Point
{
    double x;
    double y;
};
void sort_point(vector<Point>  & vp)
{
    sort(vp.begin(), vp.end(), [](auto a,auto b)
                                {
                                    if(a.x < b.x)  //比较X
                                        return true;
                                    if(a.x == b.x)  //X 相等时比较y
                                    {
                                        if(a.y < b.y)
                                            return true;
                                    }
                                    return false;
                                });
}


int main()
{
    vector<Point>  vp;
    for(int i=0; i < 10; ++i)
    {
        //输入10个坐标
        Point tp;
        cout<<"put in x y"<<endl;
        cin>>tp.x >>tp.y;
        vp.emplace_back(tp);
    }

    sort_point(vp); //排序

    //save to point.txt
    cout<<"排序完成,保存文件point.txt" << endl;
    ofstream outfile("D:\\point.txt", std::ofstream::out);
    for(auto p : vp)
    {
        outfile<<p.x << ' ' << p.y << '\n';
        cout<<p.x << ' ' << p.y << endl;
    }
    outfile.close();
    return 0;
}
非常感谢您的回复!谢谢!
  • 打赏
  • 举报
回复
makekone 2017-11-24

#include <iostream>
#include <vector>
#include <fstream>
#include  <algorithm>

using namespace std;

struct Point
{
    double x;
    double y;
};
void sort_point(vector<Point>  & vp)
{
    sort(vp.begin(), vp.end(), [](auto a,auto b)
                                {
                                    if(a.x < b.x)  //比较X
                                        return true;
                                    if(a.x == b.x)  //X 相等时比较y
                                    {
                                        if(a.y < b.y)
                                            return true;
                                    }
                                    return false;
                                });
}


int main()
{
    vector<Point>  vp;
    for(int i=0; i < 10; ++i)
    {
        //输入10个坐标
        Point tp;
        cout<<"put in x y"<<endl;
        cin>>tp.x >>tp.y;
        vp.emplace_back(tp);
    }

    sort_point(vp); //排序

    //save to point.txt
    cout<<"排序完成,保存文件point.txt" << endl;
    ofstream outfile("D:\\point.txt", std::ofstream::out);
    for(auto p : vp)
    {
        outfile<<p.x << ' ' << p.y << '\n';
        cout<<p.x << ' ' << p.y << endl;
    }
    outfile.close();
    return 0;
}
  • 打赏
  • 举报
回复
berlinpand 2017-11-24
引用 2 楼 ybs963 的回复:
忘了最后关闭文件。。。。

#include <iostream>
#include <map>
#include <fstream>
using namespace std;

int main()
{
    map<double, double> Point;
    double x,y;
    for(int i=0; i < 10; ++i)
    {
        //输入10个坐标
        cout<<"put in x y"<<endl;
        cin>>x >>y;
        Point.insert(std::pair<double, double>(x, y) );

    }
    //save to point.txt
    ofstream outfile("D:\\point.txt", std::ofstream::out);
    for(auto p : Point)
    {
        outfile<<p.first << ' ' << p.second << '\n';
    }
    outfile.close();
    return 0;
}

非常感觉您的指导,不过跑了一下发现当x值输入相同时,另一个点就没有被保存,如果需要保留相同x,y较小的在前面,可以实现么
  • 打赏
  • 举报
回复
ooolinux 2017-11-24
用一个结构体 struct Point { int x; int y; } 一个Point数组,以x为关键字进行排序就是了,如果不考虑排序算法的稳定性,数据结构书里面任何一种排序算法都可以。
  • 打赏
  • 举报
回复
makekone 2017-11-23
忘了最后关闭文件。。。。

#include <iostream>
#include <map>
#include <fstream>
using namespace std;

int main()
{
    map<double, double> Point;
    double x,y;
    for(int i=0; i < 10; ++i)
    {
        //输入10个坐标
        cout<<"put in x y"<<endl;
        cin>>x >>y;
        Point.insert(std::pair<double, double>(x, y) );

    }
    //save to point.txt
    ofstream outfile("D:\\point.txt", std::ofstream::out);
    for(auto p : Point)
    {
        outfile<<p.first << ' ' << p.second << '\n';
    }
    outfile.close();
    return 0;
}

  • 打赏
  • 举报
回复
makekone 2017-11-23

#include <iostream>
#include <map>
#include <fstream>
using namespace std;

int main()
{
    map<double, double> Point;
    double x,y;
    for(int i=0; i < 5; ++i)
    {
        //输入10个坐标
        cout<<"put in x y"<<endl;
        cin>>x >>y;
        Point.insert(std::pair<double, double>(x, y) );

    }
    //save to point.txt
    ofstream outfile("D:\\point.txt", std::ofstream::out);
    for(auto p : Point)
    {
        outfile<<p.first << ' ' << p.second << '\n';
    }

    return 0;
}
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2017-11-23 04:57
社区公告
暂无公告