Set的默認將里面的元素從小到大排序。
如果想從大到小,需要用到greater<typename>
如果Set里的元素是string類型的,則是按字典序排序的。
比如:下面這段代碼是按字典序從大到小排列的。
#include<stdio.h> #include<stdlib.h> #include<unordered_map> #include<iostream> #include<string> #include<assert.h> #include<set> int main() { string MainWord = "abppplee"; set<string, greater<string>> WordPool; WordPool.insert("able"); WordPool.insert("ale"); WordPool.insert("apple"); WordPool.insert("bale"); WordPool.insert("kangaroo"); //cout << find(MainWord, WordPool) << endl; set<string, greater<int>>::iterator it; for (it = WordPool.begin(); it != WordPool.end(); it++) cout << (*it) << endl; return 0; }
也可以自己寫個結構體來重載比較函數:
#include<stdlib.h> #include<unordered_map> #include<iostream> #include<string> #include<assert.h> #include<set> struct length_more { bool operator()(const string& s1, const string& s2) { return s1.size() > s2.size(); } }; int main() { string MainWord = "abppplee"; set<string, length_more> WordPool; WordPool.insert("able"); WordPool.insert("ale"); WordPool.insert("apple"); WordPool.insert("bale"); WordPool.insert("kangaroo"); //cout << find(MainWord, WordPool) << endl; set<string>::iterator it; for (it = WordPool.begin(); it != WordPool.end(); it++) cout << (*it) << endl; return 0; }