如何在 CvPoint 和 int 的结构上应用 std::sort 和 std::erase?
Posted
技术标签:
【中文标题】如何在 CvPoint 和 int 的结构上应用 std::sort 和 std::erase?【英文标题】:How to apply std::sort and std::erase on struct of CvPoint and int? 【发布时间】:2016-02-02 05:42:05 【问题描述】:我有一个 CvPoint 和 int 结构,如下所示。
struct strcOfPoints
CvPoint p;
int c;
;
我有一个这样的 strcOfPoints 向量
UniquePoints::strcOfPoints s1, s2, s3, s4, s5, s6, s7;
s1.p = 33, 122 , s1.c = 255;
s2.p = 68, 207 , s2.c = 158;
s3.p = 162, 42 , s3.c = 120;
s4.p = 219, 42 , s4.c = 50;
s5.p = 162, 216 , s5.c = 20;
s6.p = 162, 216 , s6.c = 20;
s7.p = 162, 216 , s7.c = 20;
vector <UniquePoints::strcOfPoints> strpts = s1, s2, s3, s4, s5, s6, s7 ;
Q. 我们如何在 struct 的向量上应用 std::sort 和 std::erase 来删除重复点?
注意。我可以用点向量来做到这一点。但我没有为Point和int的结构向量做到这一点。
需要进一步处理的指南。谢谢
【问题讨论】:
您需要想出一种方法来比较您的结构,然后将其用作 std::sort 的第三个参数。 【参考方案1】:首先,让我们构建一个比较器:
bool compare(strcOfPoints const & lhs, strcOfPoints const & rhs)
return std::tie(lhs.p, lhs.c) < std::tie(rhs.p, rhs.c);
接下来我们对向量进行排序:
vector<strcOfPoints> strpts = s1, s2, s3, s4, s5, s6, s7 ;
std::sort(strpts.begin(), strpts.end(), compare);
最后我们删除所有重复项:
strpts.erase(
std::unique(strpts.begin(), strpts.end(), compare),
strpts.end());
【讨论】:
以上是关于如何在 CvPoint 和 int 的结构上应用 std::sort 和 std::erase?的主要内容,如果未能解决你的问题,请参考以下文章
opencv的基本数据类型CvPoint,CvSize,CvRect,CvScalar
从“CvSeq”类型到“CvPoint*”类型的无效转换(如何在 Opencv 中进行类型转换)