1、Int main() Map mapStudent.insert(pair(1, “student_one”);(2, “student_two”);(3, “student_three”); map:iterator iter; for(iter = mapStudent.begin(); iter != mapStudent.end(); iter+) Coutfirst” ”secondend;第二种:用insert函数插入value_type数据,下面举例说明 mapStudent.insert(mapvalue_type (1, “student_one”);value_type (
2、2, “student_two”);value_type (3, “student_three”);第三种:用数组方式插入数据,下面举例说明 mapStudent1 = “student_one”; mapStudent2 = “student_two”; mapStudent3 = “student_three”;以上三种用法,虽然都可以实现数据的插入,但是它们是有区别的,当然了第一种和第二种在效果上是完成一样的,用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是插入数据不了的,但是用数组方式就不同了,它可以覆盖以前该关键字对
3、应的值,用程序说明mapStudent.insert(mapvalue_type (1, “student_two”);上面这两条语句执行后,map中1这个关键字对应的值是“student_one”,第二条语句并没有生效,那么这就涉及到我们怎么知道insert语句是否插入成功的问题了,可以用pair来获得是否插入成功,程序如下Pairmap Insert_Pair;Insert_Pair = mapStudent.insert(map我们通过pair的第二个变量来知道是否插入成功,它的第一个变量返回的是一个map的迭代器,如果插入成功的话Insert_Pair.second应该是true的,否
4、则为false。下面给出完成代码,演示插入成功与否问题 Insert_Pair mapStudent.insert(pair If(Insert_Pair.second = true) ”Insert Successfully”endl; Else”Insert Failure”(1, “student_two”);大家可以用如下程序,看下用数组插入在数据覆盖上的效果 mapStudent1 = “student_two”; mapStudent2 = “student_three”;3. map的大小在往map里面插入了数据,我们怎么知道当前已经插入了多少数据呢,可以用size函数,用法如下
5、:Int nSize = mapStudent.size();4. 数据的遍历这里也提供三种方法,对map进行遍历应用前向迭代器,上面举例程序中到处都是了,略过不表应用反相迭代器,下面举例说明,要体会效果,请自个动手运行程序reverse_iterator iter; for(iter = mapStudent.rbegin();= mapStudent.rend();用数组方式,程序说明如下 int nSize = mapStudent.size()/此处有误,应该是 for(int nIndex = 1; nIndex = nSize; nIndex+)/by rainfish for(i
6、nt nIndex = 0; nSize;mapStudentnIndex5. 数据的查找(包括判定这个关键字是否在map中出现)在这里我们将体会,map在数据插入时保证有序的好处。要判定一个数据(关键字)是否在map中出现的方法比较多,这里标题虽然是数据的查找,在这里将穿插着大量的map基本用法。这里给出三种数据查找方法用count函数来判定关键字是否出现,其缺点是无法定位数据出现位置,由于map的特性,一对一的映射关系,就决定了count函数的返回值只有两个,要么是0,要么是1,出现的情况,当然是返回1了用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置
7、的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器,程序说明 iter = mapStudent.find(1);if(iter != mapStudent.end()”Find, the value is ”Else”Do not Find”这个方法用来判定数据是否出现,是显得笨了点,但是,我打算在这里讲解Lower_bound函数用法,这个函数用来返回要查找关键字的下界(是一个迭代器)Upper_bound函数用法,这个函数用来返回要查找关键字的上界(是一个迭代器)例如:map中已经插入了1,2,3,4的话,如果lower_bound(2)的话,返回的2,而u
8、pper-bound(2)的话,返回的就是3Equal_range函数返回一个pair,pair里面第一个变量是Lower_bound返回的迭代器,pair里面第二个迭代器是Upper_bound返回的迭代器,如果这两个迭代器相等的话,则说明map中不出现这个关键字,程序说明 mapStudent5 = “student_five”;iter = mapStudent.lower_bound(2); /返回的是下界3的迭代器iter = mapStudent.lower_bound(3); iter = mapStudent.upper_bound(2); /返回的是上界3的迭代器iter =
9、 mapStudent.upper_bound(3); /返回的是上界5的迭代器iterator, map mapPair;mapPair = mapStudent.equal_range(2);if(mapPair.first = mapPair.second) coutCout”Find”mapStudent; StudentInfo studentInfo; studentInfo.nID = 1; studentInfo.strName = “student_one”;(studentInfo, 90); studentInfo.nID = 2; studentInfo.strName
10、 = “student_two”;mapStudent.insert(pair(studentInfo, 80);for (iter=mapStudent.begin(); iter!=mapStudent.end();first.nIDendlfirst.strName以上程序是无法编译通过的,只要重载小于号,就OK了,如下: Bool operator (tagStudentInfo const& _A) const /这个函数指定排序策略,按nID排序,如果nID相等的话,按strName排序 If(nID _A.nID) return true; If(nID = _A.nID) return strNpare(_A.strName) 0; Return false;仿函数的应用,这个时候结构体中没有直接的小于号重载,程序说明Classs sort Public: Bool operator() (StudentInfo const &_A, StudentInfo const &_B) const If(_A.nID _B.nID) return true; If(_A.nID = _B.nID) return _A.strNpare(_B.strName)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1