#include<iostream>
#include<set>
#include"Header.h"
using namespace std;
template<class T>
class RuntimeCmp{
public:
enum cmp_mode
{
normal1, reverse
};
private:
cmp_mode mode;
public:
RuntimeCmp(cmp_mode m = normal1) :mode(m){
}
bool operator()(const T& t1, const T& t2) const{
return mode == normal1 ? t1 < t2 : t2 < t1;
}
bool operator== (const RuntimeCmp& rc){
return mode == rc.mode;
}
};
typedef set<int, RuntimeCmp<int> > IntSet;
void fill(IntSet & set);
int main(){
IntSet coll;
fill(coll);
Print_Elements(coll,"coll: ");
RuntimeCmp<int> reverse_order(RuntimeCmp<int>::reverse);
IntSet coll2(reverse_order);
fill(coll2);
Print_Elements(coll2, "coll2: ");
coll = coll2;
coll.insert(3);
Print_Elements(coll, "coll: ");
Print_Elements(coll2);
if (coll.value_comp() == coll2.value_comp()){
cout << " coll and coll2 have same sorting criterion" << endl;
}
else
{
cout << "coll and coll2 have diff sorting " << endl;
}
getchar();
getchar();
}
void fill(IntSet & set){
set.insert(4);
set.insert(7);
set.insert(5);
set.insert(1);
set.insert(6);
set.insert(2);
set.insert(5);
#include<set>
#include"Header.h"
using namespace std;
template<class T>
class RuntimeCmp{
public:
enum cmp_mode
{
normal1, reverse
};
private:
cmp_mode mode;
public:
RuntimeCmp(cmp_mode m = normal1) :mode(m){
}
bool operator()(const T& t1, const T& t2) const{
return mode == normal1 ? t1 < t2 : t2 < t1;
}
bool operator== (const RuntimeCmp& rc){
return mode == rc.mode;
}
};
typedef set<int, RuntimeCmp<int> > IntSet;
void fill(IntSet & set);
int main(){
IntSet coll;
fill(coll);
Print_Elements(coll,"coll: ");
RuntimeCmp<int> reverse_order(RuntimeCmp<int>::reverse);
IntSet coll2(reverse_order);
fill(coll2);
Print_Elements(coll2, "coll2: ");
coll = coll2;
coll.insert(3);
Print_Elements(coll, "coll: ");
Print_Elements(coll2);
if (coll.value_comp() == coll2.value_comp()){
cout << " coll and coll2 have same sorting criterion" << endl;
}
else
{
cout << "coll and coll2 have diff sorting " << endl;
}
getchar();
getchar();
}
void fill(IntSet & set){
set.insert(4);
set.insert(7);
set.insert(5);
set.insert(1);
set.insert(6);
set.insert(2);
set.insert(5);
}
运行结果如下:
coll: 1 2 4 5 6 7
coll2: 7 6 5 4 2 1
coll: 7 6 5 4 3 2 1
7 6 5 4 2 1
coll and coll2 have same sorting criterion