排序双打传染媒介传染媒介

时间:2012-09-04 14:33:36

标签: c++ opencv

我有先前聚类的向量,以及当前聚类的向量。一个集群有一个2D Point2F的矢量,我想基于每个集群之间的距离来挑选出那些集群,这些集群存储在距离矢量中,或者你能建议一种更好的方法来对集群矢量进行排序吗?

 distances.resize(previousClusters.size()*currentClusters.size());
         for (int i=0; i<previousClusters.size()*currentClusters.size(); i++)
         {
             distances[i].resize(previousClusters.size()*currentClusters.size());
         }

         for (int i=0; i< previousClusters.size(); i++)
         {

             for(int j=0; j < currentClusters.size(); j++)
             {

                 distances[i][j] = cv::norm(previousClusters[i].m_Properties.m_Center - currentClusters[j].m_Properties.m_Center );
             }
         }

2 个答案:

答案 0 :(得分:4)

注意:这回答了最初编写的问题(因为它仍然写在标题中)。问题的主体已经改变为使其无效,但答案可能仍然有助于对矢量矢量进行排序。

首先,您需要确定一个向量在另一个向量之前排序的含义,并编写一个比较器:

struct compare_distance_vectors {
    bool operator()(std::vector<double> const & v1, std::vector<double> const & v2) {
        // implement your comparison here.
        // return "true" if v1 should come before v2.
    }
};

然后使用std::sort按照排序进行排序:

std::sort(vectors.begin(), vectors.end(), compare_distance_vectors());

如果你想要词典排序(即按第一个元素排序,然后按第二个排序,如果相等,等等),那么你可以使用默认比较器({{1 },并使用std::less<value_type>进行比较):

<

通常,要按照任何顺序对任何类型的序列(例如std::sort(vectors.begin(), vectors.end()); )进行排序,请编写类似的比较器以指定顺序,然后将std::vector<cv::Point2f>与该比较器一起使用。

答案 1 :(得分:-1)

您可以尝试在“上部”向量上使用std::sort(第二个原型允许您首先定义“较低”向量的排序方式),然后每次调用函数对象Comp时,在每个“较低”的方法上再次使用std :: sort(这次第一个原型就够了)。

这也适用于你的第二个问题。