关联容器(二)

来源:互联网 发布:c语言程序小游戏 编辑:程序博客网 时间:2024/06/06 16:35

关联容器操作

1、关联容器迭代器

当解引用一个关联容器迭代器时,我们会得到一个类型为容器value_type的值的引用。对map而言,value_type是一个pair类型,其first成员保存const的关键字,second成员保存

//获得指向word_count中一个元素的迭代器

automap_it = word_count.begin( );

//*map_it是指向一个pair<const string , size_t>对象的引用

cout<< map_it->first;

cout<< map_it->second;//错误,关键字是const的

++map_it->second;//正确,我们可以通过迭代器改变元素

注:一个mapvalue_type是一个pair,我们可以改变pair的值,但是不能改变关键字成员的值。

set的迭代器是const的:

虽然set同时定义了iterator和const_iterator类型,但两种类型都只允许只读访问set中的元素。与不能改变一个map元素的关键字一样,set中的关键字也是const的。可以用一个set迭代器来读取元素,但是不能修改。

set<int>iset = {1,2,3,4,54,6,7,54};

set<int>::iteratorset_it = iset.begin( );

if(set_it!=iset.end))

{
       *set_it = 42;

       cout<<*set_it<<endl;

}

2、添加元素

关联容器的insert成员向容器中添加一个元素或一个元素的范围。由于map和set保护不重复的关键字,因此插入一个已经存在的元素对容器没有任何影响。

vector<int> ivec={2,4,6,8,2,4,6,8};

set<int>set2;

set2.insert(ivec.cbegin(), ivec.cend( ));//set2只有四个元素

向map中添加元素:
//向word_count插入word的四种方法

word_count.insert({word,1});

word_count.insert({word,1});

word_count.insert(pair<string, size_t>(word, 1));

word_count.insert(map<string,size_t>::value_type(word, 1));

3、删除元素

关联容器定义了三个版本的erase。


我们可以通过传递给erase一个迭代器来删除一个元素,或者一个迭代器对来删除一个元素范围。

4、访问元素

关联容器提供多种查找一个指定元素的方法。如果我们只关系元素是否在容器中,可能find是最佳选择。对于不重复关键字的容器,可能使用find和count没什么区别。但对于重复关键字的容器,count还可以统计出关键字相同的元素有多少个。如果不需要计算,最好用find。

set<int>iset={0,1,2,3,4,5,6,7,8,9};

iset.find(1);//返回一个迭代器,指向key==1的元素

iset.find(11);//返回一个迭代器,其值等于iset.end( )

iset.count(1);//返回1

iset.count(11);//返回0



0 0
原创粉丝点击