企业网站系统那个好,制作网站监控推荐,网站订单系统模板下载,苏州网站建设工作室map和set
c98支持的是单参数的隐式类型转换#xff0c;而c11支持多参数的隐式类型转换#xff1b;
1.map和set的使用
1.1set
set实现key值不允许修改#xff0c;是将iterator转变成const_iterator#xff1b;可以对同一个类型typedef成两个不同的自定义标识符。即…map和set
c98支持的是单参数的隐式类型转换而c11支持多参数的隐式类型转换
1.map和set的使用
1.1set
set实现key值不允许修改是将iterator转变成const_iterator可以对同一个类型typedef成两个不同的自定义标识符。即set没有设置普通迭代器
set的底层是红黑树使用仿函数比较大小。关联式容器。
set可以实现比较记录重复次数但是需要重载仿函数实现key_value只需要set内部实现的是一个结构体。
count和equal_range在set容器里面一样不大而在multiset才有意义。
template class T, // set::key_type/value_typeclass Compare lessT, // set::key_compare/value_compareclass Alloc allocatorT // set::allocator_type class set;
//1.构造
empty (1) explicit set (const key_compare comp key_compare(),const allocator_type alloc allocator_type());
range (2) template class InputIteratorset (InputIterator first, InputIterator last,const key_compare comp key_compare(),const allocator_type alloc allocator_type());
copy (3) set (const set x);
//2.迭代器
//和一起的容器一样迭代器底层走的是一个中序遍历还可以去重。
//3.insert
iterator insert (iterator position, const value_type val);//某个迭代器位置进行插入
//4.erase
void erase (iterator position);//配合find使用使用find找到迭代器位置。
size_type erase (const value_type val);//根据值来进行删除。其实就是find和erase的复用但是会断言。
//5.find
template class InputIterator, class T
InputIterator find (InputIterator first, InputIterator last, const T val);//暴力查找会查找O(N)次
iterator find (const value_type val) const;//因为树的左右两边是平衡的会根据大小进行比较最多访问高度次lg(N)次建议优先使用它。
//6.key/value的仿函数
key_compare key_comp() const;
value_compare value_comp() const;
//7.count
size_type count (const value_type val) const;//返回这个值出现的次数在set中存在返回的就是1不存在返回的就是零。
//8.找边界
//常用在erase使用区间删除
iterator lower_bound (const value_type val) const;//返回的迭代器位置是大于等于这个值
iterator upper_bound (const value_type val) const;//由于区间一般是左闭右开所以返回的迭代器位置一般是这个值的下一位。即删除找左闭右闭查找找左闭右开
//9.找区间
pairiterator,iterator equal_range (const value_type val) const;1.2multiset(Multiple-key set)
支持键值冗余的multiset容器相等的值插入在左边和右边都可以。
//1.count
size_type count (const value_type val) const;//返回val的个数
//2.equal_range
pairiterator,iterator equal_range (const value_type val) const;//由于set容器是一个有序的红黑树所以大小相同的值的是一段连续的区间范围可以用pair结构来接收迭代区间的lower和upper。返回大于val数的[val,val)
//3.find
//相较于set的find由于有了数据冗余所以返回值返回的是中序遍历的第一个val的iterator1.3map
使用map来完成括号匹配问题而且初始化用initializer_list更加方便。
键值唯一value可重复map内存放的是pair对象key必须支持比较大小如果不支持比较大小可以自己写一个仿函数来实现因为仿函数比较使用的就是key
template class Key, // map::key_typeclass T, // map::mapped_typeclass Compare lessKey, // map::key_compare只有key参与比较class Alloc allocatorpairconst Key,T // map::allocator_type class map;//相较于set多了一个模板参数用来设置value
//1.insert
pairiterator,bool insert (const value_type val);//1.value_type是一个pairconst key_type,mapped_type,即key只读不允许写入而value可读写2.可以使用make_pair函数模板来实现传入参数val或者使用隐式类型转换3.设置pair的原因是c不支持返回多个参数但是可以返回一个结构如解引用运算符重载返回的就是一个结构4.key相同但是value不相同也不会插入不会覆盖值比较key不关心value5.返回值插入成功返回true要插入的key值存在则是false
//2.erase
void erase (iterator position);
size_type erase (const key_type k);
//3.operator[]
mapped_type operator[] (const key_type k);//特点是通过key来返回value
//对于不存在的key值会创建并用匿名对象来初始化pair已经存在的key值会修改value值
//底层实现就是return (*((this-insert(make_pair(k,mapped_type()))).first)).second即使用的是insert的返回值中的迭代器位置的value。
//1.可以使用[]来实现统计出现的次数2.可以实现插入加修改1.4multimap
支持键值冗余的multimap容器value和map一样。
1.相较于map没有提供[]因为键值不是唯一的。
2.insert返回的是迭代器不是pair因为插入一定成功;
3.哈希的效率可以达到O1
1.5pair
template class T1, class T2
struct pair {typedef T1 first_type;typedef T2 second_type;T1 first;T2 second;pair() : first(T1()), second(T2()) {}pair(const T1 a, const T2 b) : first(a), second(b) {}
}