关联容器Primer

关联容器:

标准库提供八个关联容器:八个容器的不同体现在三个维度:

1.或者是一个set,或者是一个map;

2.或者要求重复的关键字,或者要求关键字不可重复;体现在有无multi;

3.按顺序保存元素,或者无序;无序都以unordered开头,如unordered_map;

map;

set;

multimap;有序的可重复的map;

multiset有序的关键字可重复的set;

unordered_map;无序,关键字不能重复的map;

unordered_set;无序,关键字不能重复的set

unordered_multimap;无序,关键字可重复出现的map;

unordered_multiset;无序,关键字可重复出现的set;

头文件分别为:map,set,unordered_map;unordered_set;

map类型也称作关联数组,不同的是其下标不一定是数字,可以是多种关键字,;

set是关键字的简单集合,当只想知道一个值是否存在时,使用set,如一个企业可以使用set保存开过支票的人;

关联容器的数据结构将决定搜索的效率和安全性;

定义关联容器:

初始化map时,将每个关键字-值对包围在花括号中:{key,value};

multi的原因:比如一个字典中,一个单词有多个含义,这时就要使用multiset,

关键字类型的要求:

对于有序容器,关键字类型必须定义元素比较的方法,默认情况下标准库使用关键字类型的<运算符比较两个关键字。因此如果关键字类型是类类型,必须重载<运算符;相应的如果一个类型定义了行为正常的<运算符,就可以用作关键字类型;

自定义set,map:

为了使用自己的定义,在定义multiset时必须提供两个类型,关键字类型,以及比较操作类型——一种函数指针类型;定义如下:

multiset<Sales_Data,decltype(compareIsbn)*>bookstore(compareIsbn);

使用decltype指定自定义操作类型;


pair类型:

头文件:utility中;

构造函数:包括有参构造函数和列表初始化两个;

类似于new,也可以用,make_pair(k,v)初始化一个pair,

关系运算符:按字典序定义:当p1.first<p2.first或者!(p2.first<p1.first)&&p1.second<p2.second时,p1<p2成立;而map,set,multiset,multimap只根据关键字的<运算符来进行排序;跟pair.second无关;

==,!=:当first,second都相等时,两个pair相等;


关联容器操作

关联容器定义的类型:

key_type:此容器类型的关键字类型,

mapped_type:map容器的值类型,即value类型;

value_type:对于set与key_value相同,对于map,为pair<const key_type,mapped_type>;

set<string>::value_type v1//v1是string,

map<string,int>::value_type v2//v2是一个pair<const string,int>

关联容器迭代器:关键字类型都是const,无法通过迭代器修改他们,但值类型可以修改;

添加元素

使用insert,emplace函数,有时我们有想要插入的数据,但没有现成的元素,可以使用构造函数来插入,或者使用emplace函数传入相应的参数;

vector<int>ivec={2,3,4,5,6,7,8,9,0};
set<int>set1;
set1.insert(ivec.cbegin(),ivec.cend());

删除元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值