gpt4 book ai didi

c++ - 如何在 CvPoint 和 int 结构上应用 std::sort 和 std::erase?

转载 作者:行者123 更新时间:2023-11-30 03:44:54 24 4
gpt4 key购买 nike

我有一个 CvPoint 和 int 的结构,如下所示。

struct strcOfPoints {
CvPoint p;
int c;
};

我有一个像这样的 strcOfPoints vector

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

问。我们如何在结构 vector 上应用 std::sort 和 std::erase 来删除重复点?

注意。我可以用点 vector 来做。但我没能为 Point 和 int 的结构 vector 做这件事。

需要进一步处理的指南。谢谢

最佳答案

首先,让我们构建一个比较器:

bool compare(strcOfPoints const & lhs, strcOfPoints const & rhs) {
return std::tie(lhs.p, lhs.c) < std::tie(rhs.p, rhs.c);
}

接下来我们对 vector 进行排序:

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

关于c++ - 如何在 CvPoint 和 int 结构上应用 std::sort 和 std::erase?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35145892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com