测试环境:windows 7 vs2010 template<class _T1, class _T2> //两个类型参数 struct pair { typedef _T1 first_type;//_T1定义成first_type,_T2定义成second_type typedef _T2 second_type; _T1 first; //first 是_T1 类型 _T2 second; //seconde 是_T2类型 pair(): first(), second() { } //无参构造函数 pair(const _T1& __a, const _T2& __b) : first(__a), second(__b) { }// 分别用__a初始化first,__b去初始化second template<class _U1, class _U2> //这是一个模板函数构造函数,其通过一个pair对象去初始pair对象的first和second对象 pair(const pair<_U1, _U2>& __p) : first(__p.first), second(__p.second) { } };
pair<int,int> p(pair<double,double>(5.5,4.6)); // p.first = 5, p.second = 4
template<class Key, class Pred= less<Key>, class A = allocator<Key> > class multiset{ …… };
template<class T> structless : public binary_function<T, T, bool> { bool operator()(const T& x, const T& y) const { return x <y; } };
#include<iostream> #include<set> using namespace std; void main() { set<int>::iterator setIter; pair<set<int>::iterator,set<int>::iterator> mypair; pair<set<int>::iterator,bool> result; set<int> myset; for(int i=0;i<10;i++) { myset.insert(i); } result=myset.insert(3);//set insert返回pair对象 而multiset返回迭代器 if(!result.second) { cout<<"3 已经存在"<<endl; } setIter=myset.find(2);//find函数返回迭代器 if(setIter!=myset.end()) { cout<<*setIter<<endl; } else { cout<<"not find"<<endl; } mypair=myset.equal_range(4);//同时求得lower_bound和upper_bound cout<<"lower_bound:"<<*mypair.first<<endl; cout<<"upper_bound:"<<*mypair.second<<endl; for(setIter=myset.begin();setIter!=myset.end();) { if(*setIter%2==0) //删除偶数 { setIter=myset.erase(setIter); } else { setIter++; } } cout<<"删除偶数后"<<endl; for(setIter=myset.begin();setIter!=myset.end();setIter++) { cout<<*setIter<<endl; } cin.get(); }
multimap template<classKey, class T, class Pred= less<Key>, class A = allocator<T> > class multimap{ …. typedefpair<const Key, T> value_type; ……. }; //Key 代表关键字的类型
#include<iostream> #include<map> using namespace std; void main() { map<int,string> stu_name;// 编号 姓名 其中是按照编号排序 其是键值对 map<int,string>::iterator mapIter; stu_name.insert(map<int,string>::value_type(1,"zhang san")); stu_name.insert(map<int,string>::value_type(2,"li si")); stu_name.insert(make_pair(3,"wang er")); //使用make_pair也行 mapIter=stu_name.find(2);// if(mapIter!=stu_name.end()) { cout<<mapIter->second.c_str()<<endl; } else { cout<<"not find"<<endl; } for(mapIter=stu_name.begin();mapIter!=stu_name.end();mapIter++) { cout<<mapIter->first<<":"<<mapIter->second.c_str()<<endl; } cin.get(); }
|