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; }