对二重向量的向量进行排序
Sorting vector of vector of doubles
我有以前集群的向量和当前集群的向量。一个簇有一个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 );
}
}
注意:这回答了问题,因为它最初是写的(现在仍然写在标题中)。问题的正文已经更改,使其无效,但答案可能仍然有助于对矢量进行排序。
首先,您需要决定一个向量在另一个向量之前排序意味着什么,并编写一个比较器:
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
与该比较器一起使用。
您可以尝试首先对"上"向量使用std::sort(第二个原型允许您定义"下"向量的排序方式),然后每次调用函数对象Comp时,对每个"下"方法再次使用std:∶sort(这次第一个原型就足够了)。
这也适用于你的第二个问题。
相关文章:
- 将结构向量排序为子组
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 如何在对向量排序后更改索引值?c++
- C++向量排序给出0作为输出
- 将许多向量排序在一起
- 根据一个向量对多个向量排序
- 编译错误向量排序和联合
- C++我自己的函数进行向量排序
- 将字符串的向量排序为日期"yyyymmdd"
- C++ 通过使用旧向量进行预排序来改进向量排序
- C 向量排序 .h .cpp中的单独文件
- 向量排序-c++
- 将向量排序到一个无序映射c++11中
- 向量的向量排序
- c++向量排序方法编译失败,返回预期表达式
- 如何对bitset向量排序
- 向量排序的基础上只有先
- 我如何以相同的方式对两个向量排序,而条件只使用其中一个向量
- 列表排序和结构体向量排序之间的性能差距.c++
- 如何基于第二个字符串对字符串向量的向量排序