gpt4 book ai didi

c++/c struct array 成对求和

转载 作者:行者123 更新时间:2023-11-28 05:44:49 27 4
gpt4 key购买 nike

给定一对具有 2 个字段 x 和 y 的结构 vector (其中在任一 vector 中都没有找到重复的 x),我如何为每个匹配的 X 对每个值 Y 求和(或者简单地使用 Y 来表示不匹配的 X ) 是否有捷径可寻?我尝试了排序,似乎必须有一种方法可以在不使用 std::map 的情况下有效地执行此操作

例子:

v1= [{x=1,y=2}, { x=1000, y=3 }, {x=3, y=2}]

v2= [{x=0, y=0}, {x=1, y=1}, {x=3, y=-3}]

PairWiseSum(v1, v2) = [{x=0, y=0}, {x=1, y=3}, {x=3, y=-2}, {x=1000, y=3 }]

struct mystruct{
mystruct(int x, double y) {
X= x;
Y= y;
}
int X;
double Y;
bool operator < (const mystruct& other) const
{
return (x < other.x);
}
};

std::vector<mystruct> PairWiseSum(std::vector<mystruct> s1,std::vector<mystruct> s2)
{
std::vector<mystruct> sumVector;
sort(s1.begin(), s1.end());
sort(s2.begin(), s2.end());
...
return sumVector;
}

最佳答案

遍历 s1s2,比较每个集合中的当前项目。如果 x 值相同,则将它们相加。否则,输出具有较小x 值的mystruct

std::vector<mystruct> PairWiseSum(std::vector<mystruct> s1, std::vector<mystruct> s2)
{
std::vector<mystruct> sumVector;
sort(s1.begin(), s1.end());
sort(s2.begin(), s2.end());

for (auto current1 = begin(s1), current2 = begin(s2); current1 != end(s1) || current2 != end(s2); )
{
if (current1 == end(s1))
sumVector.push_back(*current2++);
else if (current2 == end(s2))
sumVector.push_back(*current1++);
else if (current1->X < current2->X)
sumVector.push_back(*current1++);
else if (current1->X > current2->X)
sumVector.push_back(*current2++);
else
{
sumVector.emplace_back(current1->X, current1->Y + current2->Y);
current1++;
current2++;
}
}
return sumVector;
}

关于c++/c struct array 成对求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36435268/

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