C++ STL关联容器 set和map学习笔记


STL提供了4种关联容器:set、multiset、map和multimap。前两种在头文件#include,后两种在头文件#include中定义的。

 

一、set (集合)

    Set是最简单的关联容器类,其值类型与键相同,键是唯一的,这意味着set中不会有多个相同的键。就像数学学过的集合一样,一个集合对象中不允许有两个相同的值一样。

Set是自动进行排序的,合并重复的对象元素,是可反转的,且键值是唯一的。

如下定义和使用:

String s1[5]={“a”,”b”,”c”,”d”,”e”};

Set A(s1,s1+5);//对set对象进行初始化操作

ostream_iteratorout(cout,” ”);//定义一个输出迭代器

    copy(A.begin(),A.end(),out)//输出A中的元素到控制台。

 

set_union()函数接受5个迭代器参数,前两个迭代器定义了第一个集合的区间,接下来两个定义了第二个集合区间,最后一个迭代器是输出迭代器,指出将结果集合复制到什么位置。

 

 例如,1.显示集合A和B的并集:

Set_union(A.begin(),A.end(),B.begin(),B.end(),ostream_iterator<string,char>out(cout,””));

   

      2.将集合A和B的并集的结果放到集合C中

Set_union(A.begin(),A.end(),B.begin(),B.end(),insert_iterator<set>(c,c.begin()));

注意:仔细比较1和2的区别,区别在于最后一个参数

 

Set_intersection()和set_difference()分别查找交集和获得两个集合的差,它们的接口与set_union()相同

 

由于排序决定了插入的位置,则set的插入只指定要插入的信息,不指定插入位置。

例如:string s(“basketball”);

      A.insert(s);//插入一个值

      A.insert(B.begin(),B.end());//插入一个范围

 

lower_bound()和upper_bound()方法:

lower_bound()将键(即对象中的元素值)作为参数并返回一个迭代器,该迭代器指向集合中第一个不小于键参数的成员。同样,upper_bound()将键(即对象中的元素值)作为参数并返回一个迭代器,该迭代器指向集合中第一个大于键参数的成员。

例如:如果有一个字符串集合,可用这两个方法获得一个这样的区间,即包含集合中从“b”到“f”的所有字符串。

二、map(映射)

 在map中,值与键的类型可以不同,键是唯一的,每个键只对应一个值

map对象中的元素就是就像一个键值对,是成对出现的,通过键的下标可以找到键对应的值。

模板类pair将这两种值存储到一个对象中。

例如:map codes;

pair item(213,”I love you”);

Codes.insert(item);

对于pair对象,可以使用first和second成员来访问其两个部分。

Cout<

你可能感兴趣的:(STL,C++,STL,set,map)