c++中两组结构体的并集
Union of two sets of structs in C++
我有SplinePoints和InterpolatedPoints的集合。它们的联合必须存储在FinalInterpolatedPoints中。
这是主文件:
#include <iostream>
#include <vector>
#include <conio.h>
#include <cmath>
#include <algorithm>
#include <iterator>
#include <set>
using namespace std;
typedef struct SplinePoints {
int x;
double y;
SplinePoints(int a, double b) : x(a), y(b) {
}
friend bool operator < (SplinePoints const&A, SplinePoints const&B) {
return A.x < B.x;
}
};
typedef struct InterpolatedPoints {
int x;
double y;
InterpolatedPoints(int a, double b) : x(a), y(b) {
}
friend bool operator < (InterpolatedPoints const&A,
InterpolatedPoints const&B) {
return A.x < B.x;
}
};
typedef struct FinalInterpolatedPoints {
int x;
double y;
FinalInterpolatedPoints(int a, double b) : x(a), y(b) {
}
friend bool operator < (FinalInterpolatedPoints const&A,
FinalInterpolatedPoints const&B) {
return A.x < B.x;
}
FinalInterpolatedPoints operator= (SplinePoints const&A) {
x = A.x;
y = A.y;
return *this;
}
FinalInterpolatedPoints operator= (InterpolatedPoints const&A) {
x = A.x;
y = A.y;
return *this;
}
};
inline bool operator < (InterpolatedPoints const&A,
SplinePoints const&B) {
return A.x < B.x;
}
int main (int argc, char** argv) {
set <SplinePoints> set1;
set <InterpolatedPoints> set2;
set <FinalInterpolatedPoints> BaseLine;
set1.insert(SplinePoints(1,2));
set1.insert(SplinePoints(2,5));
set1.insert(SplinePoints(3,8));
set1.insert(SplinePoints(4,1.66));
set2.insert(InterpolatedPoints(5,5.768));
set2.insert(InterpolatedPoints(6,5.560));
set2.insert(InterpolatedPoints(7,5.643));
set2.insert(InterpolatedPoints(8,5.313));
set_union(set1.begin(), set1.end(), set2.begin(), set2.end(), inserter(BaseLine, BaseLine.begin()));
getch();
return 0;
}
我使用这个函数来做:
set_union(set1.begin(), set1.end(), set2.begin(), set2.end(), inserter(BaseLine, BaseLine.begin()));
其中set1、set2和BaseLine的类型分别为SplinePoints、InterpolatedPoints和FinalInterpolatedPoints。
当我调试程序时,我得到<
和'='操作符的模板重载错误,这些操作符被引用到头文件alogrithm
的源文件
template<class _InIt1,
class _InIt2,
class _OutIt> inline
_OutIt _Set_union(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
{ // OR sets [_First1, _Last1) and [_First2, _Last2), using operator<
for (; _First1 != _Last1 && _First2 != _Last2; )
**if (_DEBUG_LT(*_First1, *_First2))**
{ // copy first
***_Dest++ = *_First1;**
++_First1;
}
**else if (*_First2 < *_First1)**
{ // copy second
***_Dest++ = *_First2;**
++_First2;
}
else
{ // advance both
***_Dest++ = *_First1;**
++_First1;
++_First2;
}
_Dest = _STD copy(_First1, _Last1, _Dest);
return (_STD copy(_First2, _Last2, _Dest));
}
我在结构定义中包含了操作符重载函数,但我只能摆脱与<
函数相关的错误。我仍然难以删除与=
相关的错误,即:
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const SplinePoints' (or there is no acceptable conversion)
请帮忙!
尝试:
FinalInterpolatedPoints operator= (const SplinePoints &A)
即,将const
关键字移动到类型(SplinePoints
)之前。
您的代码有些地方很奇怪。把typedef
放到类的前面:
/*drop: typedef*/ struct SplinePoints {
,而且,你的operator=
应该返回一个引用,例如,
FinalInterpolatedPoints& operator= (SplinePoints const&A) {
// ^ add this!
x = A.x;
y = A.y;
return *this;
}
除此之外,您还没有提供一个可编译的完整示例。如果您在修复上述问题后仍有问题,请创建一个并编辑问题。
相关文章:
- 按结构体的特定成员对结构体数组进行排序
- 如何调用一个函数,它在一个单独的类中打印出一个结构体数组
- 如何创建一个结构体数组
- 初始化用于pthread的结构体数组
- 如何将文件的行读入结构体数组
- 结构体数组,非常量大小
- 无法将结构体数组传递给函数
- 确定它用作参数的结构体数组的大小
- 如何将结构体数组的单个成员数组传递给函数以执行线性搜索
- 如何使用std::binary_search或std::sort对结构体数组进行排序
- c++中对结构体数组使用排序选择
- 在c++中将结构体数组平整化为多个数组
- 在c++中创建结构体数组
- 不能操作由字符串组成的结构体数组
- 传递结构体数组的预期非限定id错误
- 将c++中的结构体数组传递给swift
- 尝试创建一个函数,将数据从文件读取到结构体数组中
- 在c++中创建结构体数组
- 添加并列出一个结构体数组
- Arduino编程中的结构体数组