C++标准模板库_note(3)

关联容器

特点

set,multiset,map,mutimap是一种非线性的树结构–红黑是(算法导论里有详细说明)。

set

一组元素的集合,元素都是唯一的而且按照一定顺序排列,每个元素被称为实例。内部是通过链表的范式来存储,所以插入比vector快,查找和尾部插入比vector慢。

mutiset

多重集合
基本和set一样,不过元素可以出现多次。

map

提供key-value的数据存储方式。key不可重复,并且按照一定顺序,也是以链表的方式存储。

mutimap

和map一样,不过key可以重复。

相对于顺序容器

  • 采用红黑树结构
  • set,map保证元素唯一性。
  • 元素是有序的。

    基于以上特点,关联容器的插入删除(非尾部)要比vector快比list慢;查询比vector慢比list快,容器越大关联容器优势越明显;map可以用下标来检索数据,只有vector可以。

set & mutiset

begin() 返回指向第一个元素的迭代器
clear() 清除所有元素
count() 返回某个值元素的个数
empty() 如果集合为空,返回true
end() 返回指向最后一个元素的迭代器
equal_range() 返回第一个>=关键字的迭代器和>关键字的迭代器

pair <iterator,iterator>equal_range( const key_type &key );
//key是用于排序的关键字
Set<int> ctr;
Pair<set<int>::iterator,set<int>::iterarot>p;
For(i=0;i<=5;i++) ctr.insert(i);
P=ctr.equal_range(2);

那么* p.first==2;*p.second==3;
erase() 删除集合中的元素

iterator erase( iterator i ); //删除i位置元素
iterator erase( iterator start, iterator end );
//删除从start开始到end(end为第一个不被删除的值)结束的元素
size_type erase( const key_type &key );
//删除等于key值的所有元素(返回被删除的元素的个数)
//前两个返回第一个不被删除的双向定位器,不存在返回末尾
//第三个返回删除个数


find() 返回一个指向被查找到元素的迭代器

iterator find( const key_type &key );
//查找等于key值的元素,并返回指向该元素的迭代器;
//如果没有找到,返回指向集合最后一个元素的迭代器

get _ allocator() 返回集合的分配器
insert() 在集合中插入元素

iterator insert( iterator i, const TYPE &val ); //在迭代器i前插入val
void insert( input_iterator start, input_iterator end );
//将迭代器start开始到end(end不被插入)结束返回内的元素插入到集合中
pair insert( const TYPE &val );
//插入val元素,返回指向该元素的迭代器和一个布尔值来说明val是否成功被插入
//应该注意的是在集合(Sets中不能插入两个相同的元素)

lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器

iterator lower_bound( const key_type &key );
//返回一个指向大于或者等于key值的第一个元素的迭代器

key_comp() 返回一个用于元素间值比较的函数

key_compare key_comp();
//返回一个用于元素间值比较的函数对象

max_ size() 返回集合能容纳的元素的最大限值
rbegin() 返回指向集合中最后一个元素的反向迭代器

Set<int> ctr;
Set<int>::reverse_iterator rcp;
For(rcp=ctr.rbegin();rcp!=ctr.rend();rcp++)
Cout<<*rcp<<” ”;

rend() 返回指向集合中第一个元素的反向迭代器
size() 集合中元素的数目
swap() 交换两个集合变量

void swap( set &object ); //交换当前集合和object集合中的元素

upper_ bound() 返回大于某个值元素的迭代器

iterator upwer_bound( const key_type &key );
//返回一个指向大于key值的第一个元素的迭代器

value_comp() 返回一个用于比较元素间的值的函数

iterator upper_bound( const key_type &key );//返回一个用于比较元素间的值的函数对象

map & mutimap

begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数

size_type count( const KEY_TYPE &key );
//返回map中键值等于key的元素的个数

empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器

equal_ range() 返回特殊条目的迭代器对

pair equal_range( const KEY_TYPE &key );
//返回两个迭代器,指向第一个键值为key的元素和指向最后一个键值为key的元素

erase() 删除一个元素

void erase( iterator i ); //删除i元素
void erase( iterator start, iterator end ); 
//删除从start开始到end(不包括end)结束的元素
size_type erase( const key_type &key );
//删除等于key值的所有元素(返回被删除的元素的个数)

find() 查找一个元素

iterator find( const key_type &key );
//查找等于key值的元素,并返回指向该元素的迭代器;
//如果没有找到,返回指向集合最后一个元素的迭代器.

get_allocator() 返回map的配置器
insert() 插入元素

iterator insert( iterator pos, const pair<KEY_TYPE,VALUE_TYPE> &val );
//插入val到pos的后面,然后返回一个指向这个元素的迭代器
void insert( input_iterator start, input_iterator end );
//插入start到end的元素到map中
pair<iterator, bool> insert( const pair<KEY_TYPE,VALUE_TYPE> &val );
//只有在val不存在时插入val。返回指向被插入元素的迭代器和描述是否插入的bool值

key_comp() 返回比较元素key的函数

key_compare key_comp();
//返回一个用于元素间值比较的函数对象

lower_bound() 返回键值>=给定元素的第一个位置

iterator lower_bound( const key_type &key );
//返回一个指向大于或者等于key值的第一个元素的迭代器

max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数

swap() 交换两个map

void swap( map &obj );
//swap()交换obj和现map中的元素

upper_ bound() 返回键值>给定元素的第一个位置

iterator upwer_bound( const key_type &key );
//返回一个指向大于key值的第一个元素的迭代器

value_comp() 返回比较元素value的函数

value_compare value_comp();
//返回一个用于比较元素value的函数

你可能感兴趣的:(链表,C语言,存储,算法导论,数据存储)