STL之set map 和multiset multimap理解

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

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

3.set和map的区别?
set是
map是

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 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 insert (const value_type& val); value_type就是pair类型
方式一:调用pair的构造函数,构造一个匿名对象插入
map m;
m.insert(pair(2,“two”));

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

你可能感兴趣的:(c++复习,c++,数据库,数据结构)