#include#include #include #include using namespace std; int main() { static default_random_engine e(time(nullptr)); static uniform_int_distribution u(1, 100); set s_default; set > s_greater; set > s_less; for (int i = 0; i < 10; ++i) { s_default.insert(u(e)); s_greater.insert(u(e)); s_less.insert(u(e)); } cout << "The default set container is :" << endl; for (int v : s_default) cout << v << ' '; cout << endl << endl; cout << "The greater set container is :" << endl; for (int v : s_greater) cout << v << ' '; cout << endl << endl; cout << "The less set container is :" << endl; for (int v : s_less) cout << v << ' '; cout << endl << endl; return 0; }
输出的结果是:
The default set container is : 3 4 13 22 29 38 48 59 74 The greater set container is : 94 65 55 42 37 34 28 16 12 1 The less set container is : 19 21 36 57 68 70 80 81结论1:
在set容器中,默认是降序;greater<>() 是降序;less<>() 是升序!
自定义数据类型的set容器的升序与降序#include#include #include #include using namespace std; struct Data { int id, score; bool operator<(const Data& rhs) const { if (score != rhs.score) return score > rhs.score; return id < rhs.id; } friend ostream& operator<<(ostream& out, const Data& obj); }; ostream& operator<<(ostream& out, const Data& obj) { out << "id = " << obj.id << "tt" << "score = " << obj.score; return out; } int main() { static default_random_engine e(time(nullptr)); static uniform_int_distribution u(1, 100); set s_self; for (int i = 0; i < 10; ++i) s_self.insert({u(e), u(e)}); cout << "The default set container is :" << endl; for (const Data& v : s_self) cout << v << endl; cout << endl << endl; return 0; }
输出的结果是:
The self-set container is : id = 63 score = 93 id = 59 score = 84 id = 1 score = 79 id = 30 score = 70 id = 48 score = 69 id = 3 score = 57 id = 76 score = 47 id = 84 score = 31 id = 84 score = 29 id = 45 score = 22结论2:
在set容器中,自定义的数据类型需要重载小于运算符,且重载的函数是常函数!这是因为set的对象是常对象。并且,小于运算符中,this在rhs的前面,比如这里的重载函数,当score不同时,score较大的是this排在前面,如果score相同则比较id!
基本数据类型的sort算法的升序与降序#include#include #include #include #include using namespace std; int main() { static default_random_engine e(time(nullptr)); static uniform_int_distribution u(1, 100); vector vec; for (int i = 0; i < 10; ++i) vec.push_back(u(e)); sort(vec.begin(), vec.end()); cout << "The defualt sort is : " << endl; for (int v : vec) cout << v << ' '; cout << endl << endl; sort(vec.begin(), vec.end(), greater ()); cout << "The greater sort is : " << endl; for (int v : vec) cout << v << ' '; cout << endl << endl; sort(vec.begin(), vec.end(), less ()); cout << "The less sort is : " << endl; for (int v : vec) cout << v << ' '; cout << endl << endl; return 0; }
输出的结果是:
The defualt sort is : 22 39 41 60 60 65 66 69 75 91 The greater sort is : 91 75 69 66 65 60 60 41 39 22 The less sort is : 22 39 41 60 60 65 66 69 75 91结论3:
sort默认的排序是升序的,greater<>() 得到的是降序的,less<>() 得到的是升序的!
自定义数据类型的sort容器的升序与降序#include#include #include #include #include using namespace std; struct Data { int id, score; bool operator<(const Data& rhs) const { if (score != rhs.score) return score > rhs.score; return id < rhs.id; } friend ostream& operator<<(ostream& out, const Data& obj); }; ostream& operator<<(ostream& out, const Data& obj) { out << "id = " << obj.id << "tt" << "score = " << obj.score; return out; } int main() { static default_random_engine e(time(nullptr)); static uniform_int_distribution u(1, 100); vector vec; for (int i = 0; i < 10; ++i) vec.push_back({u(e), u(e)}); sort(vec.begin(), vec.end()); cout << "The self-sort is : " << endl; for (const Data&v : vec) cout << v << endl; cout << endl << endl; return 0; }
输出的结果是:
The self-sort is : id = 27 score = 92 id = 71 score = 47 id = 30 score = 44 id = 45 score = 38 id = 79 score = 25 id = 23 score = 23 id = 36 score = 19 id = 55 score = 12 id = 86 score = 7 id = 60 score = 4结论4:
实现的方法和结论与结论2完全一样!小于运算符可以运用在,有序的,需要比较大小的容器或者算法中,切记要使用常函数实现!
基本数据类型的priority_queue的升序与降序#include#include #include #include using namespace std; int main() { static default_random_engine e(time(nullptr)); static uniform_int_distribution u(1, 100); priority_queue q_default; priority_queue , greater > q_greater; priority_queue , less > q_less; for (int i = 0; i < 10; ++i) { q_default.push(u(e)); q_greater.push(u(e)); q_less.push(u(e)); } cout << "The defualt priority_queue is : " << endl; while (!q_default.empty()) { cout << q_default.top() << ' '; q_default.pop(); } cout << endl << endl; cout << "The greater priority_queue is : " << endl; while (!q_greater.empty()) { cout << q_greater.top() << ' '; q_greater.pop(); } cout << endl << endl; cout << "The less priority_queue is : " << endl; while (!q_less.empty()) { cout << q_less.top() << ' '; q_less.pop(); } cout << endl << endl; return 0; }
输出的结果是:
The defualt priority_queue is : 69 67 67 65 62 60 42 26 10 6 The greater priority_queue is : 1 15 17 20 47 52 54 58 82 90 The less priority_queue is : 93 75 65 60 53 29 19 16 11 2重大总结
在sort排序、set容器,默认为升序的算法、容器中,greater是降序的!less是升序的!
在优先队列,priority_queue这种,默认为降序的容器中,greater是升序的!less是降序的!



