是一个C++的双向
map
。使用
bimap,你可以创建两个类型都可用作键值的关联容器。
bimap<X,Y>可以被视为std::map<X,Y>加上
std::map<Y,X>。
classbimap
{
public:
//左右视图
left_mapleft;//相当于std::map<X,Y>
right_mapright;//相当于std::map<Y,X>
//构造与复制
bimap();
template< class InputIterator>
bimap(InputIterator
first,InputIteratorlast);
bimap(const
bimap&)
Bimap&operator=(const
bimap&b);
//标签操作:一个被标签类型就是一个已经被
tag所标记的类型。tag可以是任意一个有效的C++类型。在一个
bimap
中,类型总是被标签的。如果你没有指定你自己的tag,则容器使用member_at::left和
member_at::right来分别标签左组和右组。要指定一个定制的tag,则每一边的类型都要标签。
template<classTag>
struct
map_by;
template<class Tag>
map_by<Tag>::type
by();
template<class Tag>
const
map_by<Tag>::type
& by() const;
template<class
Tag,class
IteratorType>
map_by<Tag>::iteratorproject(IteratorType
iter);
//迭代器投射操作
template<class
IteratoeType>
//将迭代器投射到左映射视图。
left_iterator
project_left(IteratorType
iter);
template<class
IteratoeType>
//将迭代器投射到右映射视图
和
right_iterator
project_right(IteratorType
iter);
template<class
IteratoeType>
//将迭代器投射到关系组合视图
iteratorproject_up(IteratorType
iter);
};
vcircular_buffer简介:循环缓冲区,内存中的一块用于保存固定容量的存储区域。当缓冲区被填入时,新的数据从缓冲区的开始被写入,并覆盖掉旧的数据。(见图)
Template<class
T,class
Alloc>
classcircular_buffer
{
public:
explicit circular_buffer();
explicit circular_buffer(capacity_type
capacity);
circular_buffer(size_type
n,const_referenceitem);
template <class InputIterator>
circular_buffer(InputIteratorfirst,
InputIteratorlast);
~circular_buffer();
iteratorbegin();//取指向circular_buffer
头部的迭代器
iteratorend();//取得指向circular_buffer
头部的迭代器
reference operator[](size_typeindex);//取得在index位置上的元素
referenceat(size_typeindex);
referencefront();//取得第一个元素
referenceback();//取得最后一个元素
//旋转
circular_buffer
中的元素
voidrotate(const_iterator
new_begin);
size_typesize()
;//取保存在circular_buffer
中的元素数量
//取得最大可能大小或容量(取决于分配器的max_size())。
size_type
max_size()
const;
boolempty()
const;//circular_buffer
是否为空
boolfull()
const;//circular_buffer
是否已满?
//将内部缓冲区线性化至一个连续数组
pointerlinearize();
//赋值
n
个
items到
circular_buffer
中
voidassign(size_type
n,const_referenceitem);
//插入一个新元素到circular_buffer
的末端
voidpush_back(const_referenceitem
= value_type());
//插入一个新元素到circular_buffer
的头部
voidpush_front(const_referenceitem
= value_type());
voidpop_back();//从
circular_buffer
中删除最后一个元素
void pop_front();//从
circular_buffer
中删除第一个元
iteratorinsert(iterator
pos,
const_referenceitem =
value_type());//在指定位置插入一个元素
iteratorerase(iterator
pos);//删除指定位置的一个元素
};