map-list的使用
来源:互联网 发布:sqlserver date tochar 编辑:程序博客网 时间:2024/06/05 02:09
==================================================================================
#include<iostream>#include<string>#include<list>#include<hash_map>#include <list>using namespace std;/*hash_map定义在__gnu_cxx命名空间中,故你必须在使用时限定名字空间__gnu_cxx::hash_map或者使用using关键字*/using namespace __gnu_cxx;/*如果你希望在hash中使用std::string就需要多做一点点;你需要自己加上这段代码*/namespace __gnu_cxx{template<> struct hash<string>{size_t operator()(const string& s) const{return __stl_hash_string(s.c_str());}};}struct CUid{string cltuid;char nattype;};typedef list<CUid> DEV_LIST;typedef list<CUid> ::iterator DEV_IT;struct CDevsid{DEV_LIST cltAddrList;char flag;};typedef hash_map<string, CDevsid* > sidSfdMap;typedef hash_map<string, CDevsid*>::iteratorsidSfdIterator;//key=devsid的mapsidSfdMap sidmap;//相等返回TRUEbool operator == (const CUid &one, const CUid &other){if (one.cltuid == other.cltuid) {return true; } return false;}int main(){DEV_IT cltIt;/*map查找插入*/string sid = "1";sidSfdIteratorsidIt = sidmap.find(sid);if(sidIt == sidmap.end()){CDevsid *newdevice = new CDevsid;newdevice->flag = 'A';sidmap.insert(pair<string, CDevsid*>(sid, newdevice));cout<<"insert sid="+sid<<" to sidmap ok"<<endl;}/**/string devid1 = "2";sidIt = sidmap.find(devid1);if(sidIt == sidmap.end()){CDevsid *newdevice1 = new CDevsid;newdevice1->flag = 'B';sidmap.insert(pair<string, CDevsid*>(devid1, newdevice1));cout<<"insert sid="+devid1<<" to sidmap ok"<<endl;}/**/string devid2 = "3";sidIt = sidmap.find(devid2);if(sidIt == sidmap.end()){CDevsid *newdevice2 = new CDevsid;newdevice2->flag = 'C';sidmap.insert(pair<string, CDevsid*>(devid2, newdevice2));cout<<"insert sid="+devid2<<" to sidmap ok"<<endl;}/*list查找插入*/cout<<"================================================="<<endl;CUid newclt1;newclt1.cltuid = "111111";sidIt = sidmap.find(sid);if(sidIt != sidmap.end()){cltIt = find(sidIt->second->cltAddrList.begin(),sidIt->second->cltAddrList.end(), newclt1);if(cltIt == sidIt->second->cltAddrList.end()){sidIt->second->cltAddrList.push_back(newclt1);cout<<"insert uid=" +newclt1.cltuid + " to sid="+sid<<" ok"<<endl;}}/**/CUid newclt2;newclt2.cltuid = "222222";sidIt = sidmap.find(sid);if(sidIt != sidmap.end()){cltIt = find(sidIt->second->cltAddrList.begin(),sidIt->second->cltAddrList.end(), newclt2);if(cltIt == sidIt->second->cltAddrList.end()){sidIt->second->cltAddrList.push_back(newclt2);cout<<"insert uid=" +newclt2.cltuid + " to sid="+sid<<" ok"<<endl;}}/**/CUid newclt3;newclt3.cltuid = "333333";sidIt = sidmap.find(sid);if(sidIt != sidmap.end()){cltIt = find(sidIt->second->cltAddrList.begin(),sidIt->second->cltAddrList.end(), newclt3);if(cltIt == sidIt->second->cltAddrList.end()){sidIt->second->cltAddrList.push_back(newclt3);cout<<"insert uid=" +newclt3.cltuid + " to sid="+sid<<" ok"<<endl;}}/*map遍历输出注意额:[1]下面是可以的,因为存在sidIt->first即string,这样就利用string的+操作cout<<"sid="+sidIt->first+"value flag="+sidIt->second->flag<<endl;[2]下面是不可以的,cout<<"==="+sidIt->second->flag<<endl;*/cout<<"================================================="<<endl;for(sidIt=sidmap.begin();sidIt != sidmap.end();sidIt++){cout<<"sid="+sidIt->first+"value flag="<<sidIt->second->flag<<endl;// cout<<"==="+sidIt->second->flag<<endl;} /*map查找删除*/cout<<"================================================="<<endl;string finda = "2";sidIt = sidmap.find(finda);if(sidIt != sidmap.end()){if(sidIt->second->cltAddrList.size() == 0){cout<<"delete sid=2 from sidmap where value flag="<<sidIt->second->flag<<endl;delete sidIt->second;sidmap.erase(sidIt);}}/*map遍历输出*/cout<<"================================================="<<endl;for(sidIt=sidmap.begin();sidIt != sidmap.end();sidIt++){cout<<"sid="+sidIt->first+"value flag="+sidIt->second->flag<<endl;}/*list删除*/cout<<"================================================="<<endl;sidIt = sidmap.find("1");if(sidIt != sidmap.end()){CUid newclt;newclt.cltuid = "111111";cltIt = find(sidIt->second->cltAddrList.begin(),\sidIt->second->cltAddrList.end(), newclt);if(cltIt != sidIt->second->cltAddrList.end()){cout<<"delete uid="+cltIt->cltuid<<" from sid=1"<<endl;cltIt = sidIt->second->cltAddrList.erase(cltIt); }}/*map list 全部删除*/for(sidIt=sidmap.begin();sidIt != sidmap.end();){if(sidIt->second->flag != '\0'){cltIt = sidIt->second->cltAddrList.begin();while(cltIt != sidIt->second->cltAddrList.end()){cout<<"delete uid="<<cltIt->cltuid<<" from sid="+sidIt->first+" from sidmap"<<endl;//返回下个迭代器cltIt = sidIt->second->cltAddrList.erase(cltIt); }cout<<"delete sid="+sidIt->first<<" from sidmap"<<endl;delete sidIt->second;sidmap.erase(sidIt++);}else{ sidIt++;}}}
0 0
- map-list的使用
- Map,List 迭代器的使用
- List, Map, Set与Iterator的使用
- STL------list、set、map的简单使用
- C#中collection,list,map的使用
- pojRank List 数据结构map的使用
- java中set,list,map的使用
- Python 使用list实现简单的map
- Java集合的使用:List与Map
- list、set、Map的区别和使用
- list<map<String ,object>>的使用
- list作为map使用
- List<Map>的例子
- List,Map的遍历
- Map集合与List集合的使用的深入总结
- 迭代器的使用之List和Map的遍历
- Map和List使用区别
- s:select 标签中list存放map对象的使用
- android:layout_gravity 和android:gravit的区别?
- MS SQL Server 数据类型详解
- [译]What is the Web's Model of Computation?
- 对比顺序流方式、实时流方式,确定流媒体传输方式
- 类型转换
- map-list的使用
- 免费好用的web应用托管平台
- 九度 OJ 1004 median
- 动手学Android之八——搞定列表
- MFC的COleDateTime类使用
- 代码覆盖
- 网络流+二分构图
- c语言下的通用数据库接口(之sqlite消化,模拟c#,java的反射)
- 数据表的创建与管理