论map与set的使用与原理
map和set都是STL中的一个关联性容器,它们的底层实现都是红黑树。
set是一个Key结构,而map是一个Key/Value结构.
下面来演示set与map的基本使用.
template<typename T> void printSet(const set<T> & s){ set<T>::const_iterator It = s.begin(); while(It != s.end()){ cout<<*It<<" "; ++It; } cout<<endl; } void TestSetInsert(){ set<int> s1; //set的插入 //1.通过值直接插入,返回一个pair类型的值 pair<set<int>::iterator,bool> ret; ret = s1.insert(0); if(ret.second==true){ cout<<"插入成功"<<endl; }else{ cout<<"插入失败,该值已存在"<<endl; } ret = s1.insert(0); if(ret.second==true){ cout<<"插入成功"<<endl; }else{ cout<<"插入失败,该值已存在"<<endl; } printSet(s1); //2.根据迭代器位置进行插入,返回迭代器 set<int>::iterator insertIt = s1.find(0); set<int>::iterator retIt = s1.insert(insertIt,1); if(retIt == s1.end()){ cout<<"插入失败,该值已存在"<<endl; }else{ cout<<"插入成功"<<endl; } printSet(s1); //3.插入一段迭代器区间,无返回值 vector<int> v; v.push_back(2); v.push_back(3); v.push_back(4); vector<int>::iterator startIt = v.begin(); vector<int>::iterator endIt = v.end(); s1.insert(startIt,endIt); printSet(s1); } //set的删除 void TestSetErase(){ set<int> s; s.insert(0); s.insert(1); s.insert(2); s.insert(3); s.insert(4); s.insert(5); printSet(s); //1.通过迭代器位置删除,无返回值 set<int>::iterator eraseIt = s.find(0); s.erase(eraseIt); printSet(s); //2.通过值删除,删除成功返回1,不存在返回0 size_t a = s.erase(0); printSet(s); //3.删除迭代器区间,无返回值 s.erase(++s.begin(),--s.end());//只留下第一个和最后一个,其余全 部删除 printSet(s); }
map接口与set类似,在此不再赘述!
PS:本人承接各种数据结构课设,想做数据结构课设的同学,可以联系我!(不过我不会告诉你我联系方式的!)