排序两个QVector

时间:2014-10-09 19:42:38

标签: c++ algorithm qt

我有两个QVector<double> s xy。实际上,向量代表数据点A(x [0],y [0]),B(x [1],y [1]),等等。现在我想对x进行排序并修改y,以便数据点仍然像A(x [n],y [n])。例如,如果我有x {3,6,1,5}和y {9,2,1,5}我应该收到:x {1,3,5,6}和{ {1}} {1,9,5,2}。那有什么算法吗?

3 个答案:

答案 0 :(得分:0)

您可以暂时合并向量(例如使用std::pair),然后进行排序(使用std::sort),最后再将对分割为两个向量。

答案 1 :(得分:0)

您可以通过多种方式完成此任务,一种方法是使用中间地图容器,并利用密钥排序<key,value>对的事实:

QVector<int> x = {2,1,0};
QVector<int> y = {3,2,1};

QMap<int, int> map;
for(int i = 0; i < x.size(); ++i) // Assume vectors have the same size
     map.insert(x[i], y[i]);

QList<int> xl = map.keys();
QList<int> yl = map.values();

x = QVector<int>::fromList(xl); // {0,1,2}
y = QVector<int>::fromList(yl); // {1,2,3}

答案 2 :(得分:0)

据我所知,没有Qt功能会做你想要的。排序算法并不复杂,因此您必须编写自己的代码来实现它,并且只需要使用y-vector标记,以便在y向量上重复对x向量的任何操作。我确定有人已对此进行了编码,但可能无法在任何可以找到它的地方发布。也就是说,您当然可以找到进行排序的示例代码,然后添加y向量部分。