我有一组 SplinePoints 和 InterpolatedPoints。他们的 Union 必须存储在 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));
}
我在结构定义中包含了运算符重载函数,但我只能摆脱与<
函数相关的错误。我仍然难以消除与=
ie 相关的错误:
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const SplinePoints' (or there is no acceptable conversion)
请帮忙!