栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

[C++]C++中的关联容器

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[C++]C++中的关联容器

关联容器

关联容器支持高效的关键字查找和访问,两个主要的关联容器是set和map。map中的元素是一些键值对(key-value),关键字起着索引的作用,值则表示与索引相关联的数据,set中的元素只包含一个关键字。set支持高效的关键字查找操作,底层应该是用的哈希表来实现的。

C++标准库提供了8个关联容器,这8个容器的不同体现在三个维度上:

  1. set或者map

  2. 有序或者无序—有无unordered前缀

  3. 允许或禁止重复关键字—有无multi前缀

本文重点介绍set和map,关于其他容器的相关内容可以查看C++的API

set与map的使用

使用map:

//统计每个单词在输入中出现的次数map word_count;  //新建mapstring word;while(cin>>word)
    ++word_count[word];    //将该单词所对应的次数加1for(const auto &w:word_count)    cout<1)?" times":" time")<

需要注意,对于map的下标操作如果使用word_count[word],在未找到word关键字的时候会添加一个关键字为word的元素,对其值进行初始化。如果使用word_count.at(word),在未找到word关键字的时候会抛出一个out_of_range异常。

使用set:

//统计输入中每个单词出现的次数map word_count;set exclude={"The","But","And","Or","An"};string word;while(cin>>word)    if(exclude.find(word)==exclude.end())   //当在set中未find时,返回尾迭代器
    ++word_count[word];
pair类和关联容器中额外的类型别名

pair类定义在头文件utility中,一个pair保存两个数据成员。类似于容器,pair是一个用来生成特定类型的模板。当创建一个pair的时候,我们必须提供两个类型名。

pair word_count; //保存string和size_t

与其他的标准库类型不同,pair的数据成员是public的,两个成员分别命名为first和second,map中保存的元素就是pair类型的。

关联容器还定义了其他的类型,这些类型表示容器关键字和值的类型:

  • key_type   容器的关键字类型

  • mapped_type   每个关键字关联的类型,只适用于map

  • value_type   对于set,与key_type相同,对于map,为pair

set::value_type v1; //stringset::key_type v2;  //stringmap::value_type v3; //pairmap::key_type v4;   //stringmap::mapped_type v5;//int
关联容器的迭代器

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

//获得指向word_count中一个元素的迭代器auto map_it=word_count.begin();//*map_it是指向一个pair对象的引用cout<first;cout<<" "<second;
map_it->first="new key";  //错误,关键字是const的++map_it->second;   //值的元素是可以改变的

一个set中的关键字也是const的。可以用一个set来读取元素的值,但是不能修改:

set iset={0,1,2,3,4,5,6,7,8,9};set::iterator set_it=iset.begin();if(set_it!=iset.end()){
    *set_it=42;   //错误,const的关键字不能修改
    cout<<*set_it<

           

       

原文出处

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/232891.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号