自定义的数据类型需要指定排序的方式,才可以使用set或者map容器。
set容器重载 () 的方式
需要额外定义一个类,类中重载()来指定排序的方式,Compare中指定了排序为从大到小的排序。
#include
#include
using namespace std;
class MyData {
public:
int value;
MyData(int value) {
this->value = value;
}
};
class Compare {
public:
// 注意:参数一定要加const
bool operator()(const MyData& p1, const MyData& p2) {
return (p1.value > p2.value);
}
};
void printSet(set& s) {
for (set::const_iterator it = s.begin(); it != s.end(); it++) {
cout << it->value << " ";
}
cout << endl;
}
int main(int argc, char const* argv[]) {
set s;
MyData p1(1);
MyData p2(3);
MyData p3(4);
MyData p4(2);
s.insert(p1);
s.insert(p2);
s.insert(p3);
s.insert(p4);
printSet(s);
return 0;
}
set容器重载 < 方式
如果不想额外定义类来实现指定排序,可以在原始类中直接重载<实现指定排序。
#include
#include
using namespace std;
class MyData {
public:
int value;
MyData(int value) {
this->value = value;
}
// 注意:一定要加const
bool operator<(const MyData& p) const {
return (this->value > p.value);
}
};
void printSet(set& s) {
for (set::const_iterator it = s.begin(); it != s.end(); it++) {
cout << it->value << " ";
}
cout << endl;
}
int main(int argc, char const* argv[]) {
set s;
MyData p1(1);
MyData p2(3);
MyData p3(4);
MyData p4(2);
s.insert(p1);
s.insert(p2);
s.insert(p3);
s.insert(p4);
printSet(s);
return 0;
}
map容器重载 () 的方式
#include
#include
map容器重载 < 方式
#include
#include
注意
无论是重载的()还是重载的<,都一定要加const,否则会报错。