论坛首页 编程语言技术论坛

STL容器(二)(附件Effective.STL)

浏览 3700 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (7)
作者 正文
   发表时间:2009-04-16   最后修改:2009-04-16
C++

上:STL容器(1)

     联合容器(对容器概念的另一个改造,将值与关键字关联在一起)

1   set(set,set.h)可反转,可排序,关键字是唯一的,只能存储同一类型的值。

用法如:

1)      set<string> a;   

2)      set<string, less<string>> b;                 第二个参数用于指示用来对关键字进行排序的比较函数或对象,默认使用less<>模板。

3)      set<string> A(s1,s1+3);     s1string数组                 即将一个迭代区间作为参数的构造函数,区间的最后一个元素是超尾符,关键字是唯一的且被排序。

常用方法:

1)      显示集合A和结合B的并集:                   
              set_uniton(A.begin(),A.end(),B.begin(),B.end(),ostream_iterator<string, char> out(cout,” ”))

2)      联合集合将关键字看作是常量,故C.begin()返回的是一个固定迭代器。set_union()将覆盖容器中的已有数据,并要求容器有足够的空间来容纳新信息。

3)      将两个区间复制到一个新的容器集合:

set_union(A.begin(),  A.end, B.begin(), B.end(), insert_iterator<set<string>>(C, C.begin()))

将复制转化为插入。

set_intersection()set_difference()查找交集和获得两个交集的差,接口与set_union()相同。

 4)   lower_bound()将关键字作为参数并返回一个迭代器,该迭代器指向第一个不小于关键字集合的成员,同理upper_bound()返回的迭代器指向集合中第一个大于关键字参数的成员。

2   multiset(set,multiset.h)

                   可能有多个值得关键字相同。

3   map(map,map.h)

         用法如:

                   map<string, int> wordmap;

                   set<string>::iterator si;

                   set<string> wordset;

                   for(si=wordset.begin(); si!=wordset.end(); si++)

                            wordmap.insert(pair<string, int>(*si, count(words.begin(), words.end(), *si)));

                            //wordmap[*si]=count(words.begin(), words.end, * si);

4   multimap(map,multimap.h , 可反转的,经过排序的联合器)一个关键字可以与多个值相关联。

         关键字的类型与值类型不同,特定的关键字可与多个值相关联。

         1)      使用方法:

                   multimap<int, string> codes;//第一个参数为关键字的类型,第二个单数为所存储值得类型。可选的第三个参数用于指出对关键字进行排序的比较函数或对象。默认使用less<>模板,将关键字类型作为参数。

         2)      点对为将信息结合在一起,可将关键字类型与数据类型结合为一对,方法为使用STLpair<Class T, Class U>模板将两种对象结合到一个对象中,值类型为pair<const keytype, datatype>

使用方法:

pair<const int, string> item(213, “Los Angeles”);

codes.insert(item);    或者

codes.insert(pair<const int, string> (123, “Los Angeles”));

           使用firstsecond来分别访问pair对象的两个部分,用法如:
  
cout<<item.first<<” ”<<item.second<<endl.

 3)    基本成员方法:

count()用关键字作参数,返回具有该关键字的元素的数目。

lower_bound()upper_bound()将关键字作为对象,工作方式与set相同。

                  equal_range() 用关键字作参数,返回与该关键字匹配的区间的迭代器,返回的两个值封装在一个pair对象中,此时连个模板参数是迭代其类型。用法如:

pair<multimap<KeyType, string>::iterator,

multimap<KeyType, string>::iterator> range=codes.equal_range(718).

for(it=range.first; it!=range.second; ++it){

         cout<<(*it).second<<endl;

}

 

         继续学习:http://www.stlchina.org/twiki/bin/view.pl/Main/STLLearnResouce

学习博客masterlee:  http://blog.csdn.net/masterlee/

C++ Primer Plus

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics