STL之set map 和multiset multimap理解

1.set multiset底层及区别?
都是由二叉搜索树(红黑树实现),不同在于multiset允许键值冗余。

2.map 和 multimap底层及区别?
都是由红黑树实现,不同在于multimap允许键值冗余

3.set和map的区别?
set是<key, key>
map是<key, value>

4.map的[]运算符重载是怎样的?
逻辑分三步
第一步 调用insert函数插入键值对
第二步 拿出insert返回的迭代器
第三步 从拿到的迭代器中取到value值

函数原型
mapped_type& operator[] (const key_type& k);
函数返回值
(*(this->make_pair(k, mapped_type())).first)).second
具体代码
mappd_type& operator[] (const key_type& k)
{
pair<iterator, bool> ret = insert(make_pair(k, mapped_type()));
第一步 调用insert函数插入键值对
第二步 拿出insert返回的迭代器
itertor it = ret.first;
第三步 从拿到的迭代器中取到value值
return it->second;
}

5.什么时候用“.” 什么时候用“->”?
A a;
A* p = &a
是类的对象指针或者结构体指针使用-> p->_years
而.的使用包含了-> , (**P).set( ) 一个
简单地认为“->”的左边是一个指针过于简单了。这个符号是用来代替*和.的合成,因为一般情况下通过“指针”访问结构体或对象成员,是“先求值,再取分量”,即上述的(*p).set( ),因为用两个符号过于麻烦,所以才使用“->”来代替,这样直观、简单得多。

6.map的插入函数原型以及使用代码?
函数原型
pair<iterator,bool> insert (const value_type& val); value_type就是pair类型
方式一:调用pair的构造函数,构造一个匿名对象插入
map<int, string> m;
m.insert(pair<int, sting>(2,“two”));

方式二调用make_pair函数模板插入
template <class T1, class T2>
pair<T1, T2> make_pair(T1 X, T2 Y)
{
return (pair<T1, T2>(X, Y));
}
m.insert(make_pair(2, “two”));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值