STL14-set/multiset容器
生活随笔
收集整理的這篇文章主要介紹了
STL14-set/multiset容器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
set只有一個方法就是insert
?
#include<iostream> #include<set> //set和multiset是一個頭文件 //set內部實現機制 紅黑色(平衡二叉樹的一種) //關聯式容器 //set不允許有重復元素 //multiset運行有重復元素 //容器查找效率高 //容器根據元素的值自動對元素排序 默認從小到大 using namespace std;//仿函數 class mycompare { public:bool operator()(int v1, int v2) {return v1 > v2;} }; void PrintSet(set<int> s1) {for (set<int>::iterator it = s1.begin(); it != s1.end(); it++){cout << *it << " ";}cout << endl; }//set初始化 void test01() {mycompare com;com(10, 20); //仿函數set<int> s1;s1.insert(5);s1.insert(2);s1.insert(8);s1.insert(1);for (set<int>::iterator it = s1.begin(); it != s1.end(); it++){cout << *it << " ";}//拷貝構造set<int> s2(s1);PrintSet(s2);//賦值set<int> s3;s3 = s1;//刪除操作s1.erase(s1.begin());cout << "刪除s1.begin()" << endl;PrintSet(s1);s1.erase(8);cout << "刪除8" << endl;PrintSet(s1);//如何改變默認排序?//先序遍歷 中序遍歷 后序遍歷 }//set查找 void test02() {//實值set<int> s1;s1.insert(5);s1.insert(2);s1.insert(8);s1.insert(1);PrintSet(s1);set<int>::iterator ret = s1.find(8);cout << "find 8" << endl;if (ret == s1.end()) {cout << "沒有找到" << endl;}else {cout << "ret:"<<*ret << endl;}//lower_bound:找第一個大于等于指定值的元素 返回為迭代器cout << "lower_bound(大于等于) 4" << endl;set<int>::iterator ret1 = s1.lower_bound(4); if (ret1 == s1.end()) {cout << "沒有找到" << endl;}else {cout << "ret1:" << *ret1 << endl;}//upper_bound:找第一個大于指定值的元素 返回為迭代器cout << "upper_bound(大于) 2" << endl;set<int>::iterator ret2 = s1.upper_bound(2);if (ret2 == s1.end()) {cout << "沒有找到" << endl;}else {cout << "ret2:" << *ret2 << endl;}//equal_range 返回lower_bound 和 upper_bound值/*set<int>::iterator e1;set<int>::iterator e2;pair<e1, e2>=s1.equal_range(5); 錯誤做法*/cout << "equal_range:返回lower_bound 和 upper_bound值 5" << endl;pair<set<int>::iterator, set<int>::iterator> myret= s1.equal_range(5);myret.first;myret.second;if (myret.first == s1.end()) {cout << "沒有找到" << endl;}else {cout << "找到了" <<*myret.first<< endl;}if (myret.second == s1.end()) {cout << "沒有找到" << endl;}else {cout << "找到了" << *myret.second << endl;}}class Person { public:int id;int age; public:Person(int Age,int Id):age(Age),id(Id){} }; class mycompare2 { public:bool operator() (Person p1, Person p2) const{return p1.age > p2.age; //用什么排序 把什么作為key關鍵字} }; void test03() {//set<Person> sp;//Person p1(20, 10), p2(30, 30), p3(34, 12);//sp.insert(p1);//sp.insert(p2);//sp.insert(p3); //無法對p1,p2,p3進行排序 所以運行報錯set<Person,mycompare2> sp;Person p1(20, 10), p2(30, 30), p3(34, 12);Person p4(20, 10);sp.insert(p1);sp.insert(p2);sp.insert(p3); //無法對p1,p2,p3進行排序 所以運行報錯for (set<Person, mycompare2>::iterator it = sp.begin(); it != sp.end(); it++) {cout << (*it).age << " " << (*it).id << endl;}set<Person, mycompare2>::iterator ret = sp.find(p4);if (ret == sp.end()) {cout << "未找到" << endl;}else {cout << "Age:"<<(*ret).age << endl;} } int main(int) {cout << "test01" << endl;test01();cout << "test02" << endl;test02();cout << "test03" << endl;test03();return 0; }?
#include<iostream> #include<string> using namespace std;//類模板的實現需要指定類型 //函數模板的實現不需要指定類型 //類模板:template<class T1,class T2> struct pair;void test01() {//第一種方法創建一個對組 構造 方法pair<string, int> pair1(string("name"), 1);cout << pair1.first << endl;cout << pair1.second << endl;//第二種pair<string, int> pair2 = make_pair("name", 30);cout << pair2.first << endl;cout << pair2.second << endl;//pair= 賦值pair<string, int> pair3 = pair2;cout << pair3.first << endl;cout << pair3.second << endl; }int main() {test01();return 0; }?
?
總結
以上是生活随笔為你收集整理的STL14-set/multiset容器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 同步锁_Java多线程:syn
- 下一篇: 数据结构排序1-冒泡,选择,插入排序