0

我有先前集群的向量和当前集群的向量。一个簇有一个 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 );
             }
         }
4

2 回答 2

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());

如果您想要字典顺序(即按第一个元素排序,如果相等则按第二个元素排序,依此类推),那么您可以使用默认比较器(即std::less<value_type>, 并用于<比较):

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

通常,要根据任何顺序对任何类型(例如std::vector<cv::Point2f>)的序列进行排序,请编写一个类似的比较器来指定顺序,然后std::sort与该比较器一起使用。

于 2012-09-04T14:41:11.030 回答
-1

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

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

于 2012-09-04T14:41:54.900 回答