2014-10-09 116 views
1

我有两个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}和y {1,9,5,2 }。有没有任何算法?排序二QVector

+1

我不知道Qt中的任何算法都可以做到这一点。是否有可能创建一个将x和y保存在一起的结构?然后,您可以实现它的比较运算符来比较xs,这样可以将这些结构的向量传递给任何排序算法。否则,我担心你必须自己实施这种排序。 – 2014-10-09 20:01:32

+0

我应该注意到,表现非常重要。我的QVector的长度是数千,所以创建新的'QVector','QMap'或其他容器是不合适的。我会将数据点存储在'QMap'中,但是我需要将x值(和y值)存储在相邻的存储器中。 – lnk 2014-10-09 20:24:54

回答

0

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

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} 
0

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