Hi, I tried making a customized comparator for a struct and then do a merge sort with it. but it keeps giving this error:
/usr/include/c++/11/bits/predefined_ops.h:98:22: error: no match for ‘operator<’ (operand types are ‘const myStruct<int>’ and ‘myStruct<int>’)
98 | { return __val < *__it; }
My code is like this to merge two parts of same vector.:
template<typename T>
struct myStruct
{
T key;
int cnt;
myStruct() {
cnt = std::numeric_limits<int>::max();
}
bool operator <(const myStruct<T>& rec2) {
if (key<rec2.key)
return true;
else
return false;
}
bool operator >(const myStruct<T>& rec2) {
if (key>rec2.key)
return true;
else
return false;
}
};
template <typename T>
struct myStruct_Comparator {
bool operator()(const myStruct<T>& a, const myStruct<T>& b) const {
return a.key <= b.key;
}
};
int main()
{
typedef int DATATYPE;
... ...
std::vector<myStruct<DATATYPE>> aaa = std::vector<myStruct<DATATYPE>>(100);
for(int i=0;i<50;i++)
{
aaa[i].key = dist(gen); // get random integer
std::sort(aaa.begin(),(aaa.begin()+50));
}
for(int i=50;i<100;i++)
{
aaa[i].key = dist(gen); // get random integer
std::sort(aaa.begin()+50,aaa.end());
}
std::cout<<"Unsorted: "<<std::endl;
for(auto i: aaa) {std::cout<<"Element: "<<i.key<<std::endl;}
//std::inplace_merge(aaa.begin(), aaa.begin()+50, aaa.end());
std::inplace_merge(&aaa[0], &aaa[50], &aaa[100]);
std::cout<<"\nSorted: "<<std::endl;
for(auto i: aaa) {std::cout<<"Element: "<<i.key<<std::endl;}
}```
Any advices? Thanks much.