map容器

元气小坏坏 提交于 2019-12-15 00:58:22

摘自c++手册

  • std::map 是有序键值对容器,它的元素的键是唯一的。
  • 用比较函数 Compare 排序键。搜索、移除和插入操作拥有对数复杂度。
  • map 通常实现为红黑树。

手册连接地址

下面是个人整理

/*
\ brief		头文件
*/
#include<map>

/*
\ brief		类声明
\ key		键值
\ T			值类型
\ Compare	key比较函数(默认就好,可以是仿函数)
\ Allocator 分配器(默认就好)
*/
template<class Key, class T, class Compare = std::less<Key>, 
class Allocator =   std::allocator<std::pair<const Key, T> > > 
class map;

/*
\ brief		成员类型别名
*/

// 类型别名				定义			
key_type				Key()
mapped_type				T()
value_type				std::pair<const Key, T>(pair键值对)
size_type				无符号整数类型(通常是 std::size_t )
difference_type			有符号整数类型(通常是 std::ptrdiff_t )
key_compare				Compare(键值比较的函数,可以是仿函数)
allocator_type			Allocator(分配器)
reference				value_type&(键值对引用)
const_reference			const value_type&(常量键值对引用)
pointer					std::allocator_traits<Allocator>::pointer(键值对指针)
const_pointer			std::allocator_traits<Allocator>::const_pointer(键值对常用指针)
iterator				双向迭代器
reverse_iterator		std::reverse_iterator<iterator>(逆向双向迭代器)
const_reverse_iterator	std::reverse_iterator<const_iterator>(逆向常量双向迭代器)

/*
\ brief		构造空容器
*/
map();

/*
\ brief		构造空容器
\ param		用于此容器所有内存分配的分配器
*/
explicit map( const Allocator& alloc );

/*
\ brief		构造容器,使之拥有范围 (first, last) 的内容
\ InputIt 	迭代器
\ param		first	复制元素来源的范围
\ param		last	复制元素来源的范围
\ param		comp 	用于所有关键比较的比较函数对象(默认就好)
\ param		alloc 	用于此容器所有内存分配的分配器(默认就好)
*/
template< class InputIt >
map( InputIt first, InputIt last,
     const Compare& comp = Compare(),
     const Allocator& alloc = Allocator() );

/*
\ brief		构造容器,使之拥有 other 的内容副本
\ param		要用作源以初始化容器元素的另一容器
*/
map( const map& other );

/*
\ brief		构造容器,使之拥有 other 的内容副本
\ param		other 要用作源以初始化容器元素的另一容器
\ param		alloc 用于此容器所有内存分配的分配器
*/
map( const map& other, const Allocator& alloc );

/*
\ brief		构造容器,使之拥有 other 的内容副本
\ param		要用作源以初始化容器元素的另一容器(必须具有移动语义)
*/
map( map&& other );

/*
\ brief		构造容器,使之拥有 other 的内容副本
\ param		other 要用作源以初始化容器元素的另一容器(必须具有移动语义)
\ param		alloc 用于此容器所有内存分配的分配器
*/
map( map&& other, const Allocator& alloc );

/*
\ brief		销毁容器。调用元素的析构函数,然后解分配所用的存储。
					注意,若元素是指针,则不销毁所指向的对象。
*/
~map();

/*
\ brief		复制赋值运算符。以 other 的副本替换内容
\ param		用作数据源的另一容器
\ return    *this
*/
map& operator=( const map& other );

/*
\ brief		移动赋值运算符。用移动语义以 other 的内容替换内容
\ param		用作数据源的另一容器(必须具有移动语义)
\ return	*this
*/
map& operator=( map&& other );

/*
\ breif		返回与容器关联的分配器
\ return	关联的分配器
*/
allocator_type get_allocator() const;

/*
\ brief		返回到拥有等于 key 的关键的元素被映射值的引用
\ param		要找到的元素的关键(键值)
\ return	到请求元素的被映射值的引用
*/
T& at( const Key& key );
const T& at( const Key& key ) const;

/*
\ brief		若关键不存在则插入
\ param		要寻找的元素关键
\ return	若不存在拥有关键 key 的元素,则为到新元素被映射值的引用
*/
T& operator[]( const Key& key );

/*
\ brief		若关键不存在则插入
\ param		要寻找的元素关键(必须具有移动语义)
\ return	若不存在拥有关键 key 的元素,则为到新元素被映射值的引用
*/
T& operator[]( Key&& key );

/*
\ brief		返回指向容器首元素的迭代器
\ return	指向首元素的迭代器
*/
iterator begin();
iterator begin() noexcept;
const_iterator begin() const;
const_iterator begin() const noexcept;
const_iterator cbegin() const noexcept;

/*
\ brief		返回指向容器末元素后一元素的迭代器
\ return	指向后随最后元素的迭代器
*/
iterator end();
iterator end() noexcept;
const_iterator end() const;
const_iterator end() const noexcept;
const_iterator cend() const noexcept;

/*
\ brief		返回指向逆向容器首元素的逆向迭代器
\ return	指向首元素的逆向迭代器
*/
reverse_iterator rbegin();
reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const;
const_reverse_iterator rbegin() const noexcept;
const_reverse_iterator crbegin() const noexcept;

/*
\ brief		返回指向逆向容器末元素后一元素的逆向迭代器
\ return	指向末元素后一元素的逆向迭代器
*/
reverse_iterator rend();
reverse_iterator rend() noexcept;
const_reverse_iterator rend() const;
const_reverse_iterator rend() const noexcept;
const_reverse_iterator crend() const noexcept;

/*
\ brief		检查容器是否无元素,即是否 begin() == end() 
\ return	若容器为空则为 true ,否则为 false
*/
bool empty() const;

/*
\ brief		返回容器中的元素数,即 std::distance(begin(), end()) 
\ return	容器中的元素数量
*/
size_type size() const;
size_type size() const noexcept;

/*
\ brief		返回根据系统或库实现限制的容器可保有的元素最大数量,
				即对于最大容器的 std::distance(begin(), end())
\ return	元素数量的最大值				
*/
size_type max_size() const;
size_type max_size() const noexcept;

/*
\ brief		从容器擦除所有元素
*/
void clear();
void clear() noexcept;

/*
\ brief		插入 value
\ param		要插入的值(键值对)
\ return	返回由指向被插入元素的迭代器(或阻止插入的元素的迭代器)
			和指代插入是否发生的 bool 组成的 pair 
*/
std::pair<iterator,bool> insert( const value_type& value );

/*
\ brief		插入 value 
\ p 		要插入的类型
\ param		要插入的值(必须具有移动语义)
\ return	返回由指向被插入元素的迭代器(或阻止插入的元素的迭代器)
			和指代插入是否发生的 bool 组成的 pair 
*/
template< class P >
std::pair<iterator,bool> insert( P&& value );

/*
\ brief		插入 value
\ param		要插入的值(必须具有移动语义)
\ return	返回由指向被插入元素的迭代器(或阻止插入的元素的迭代器)
			和指代插入是否发生的 bool 组成的 pair 
*/
std::pair<iterator,bool> insert( value_type&& value );

/*
\ brief		插入 value 到尽可能接近,恰好前于(C++11 起) hint 的位置
\ param		hint	指向将插入新元素到其前的位置的迭代器
\ param		value 	要插入的值
\ return	返回指向被插入元素的迭代器,或指向阻止插入的元素的迭代器
*/
iterator insert( iterator hint, const value_type& value );
iterator insert( const_iterator hint, const value_type& value );

/*
\ brief		插入 value 到尽可能接近,恰好前于(C++11 起) hint 的位置
\ p 		要插入的类型
\ param		hint  指向将插入新元素到其前的位置的迭代器
\ param		value 要插入的值(必须具有移动语义)
\ return	返回指向被插入元素的迭代器,或指向阻止插入的元素的迭代器
*/
template< class P >
iterator insert( const_iterator hint, P&& value );

/*
\ brief		插入 value 到尽可能接近,恰好前于(C++11 起) hint 的位置
\ param		hint  指向将插入新元素到其前的位置的迭代器
\ param		value 要插入的值(必须具有移动语义)
\ return	返回指向被插入元素的迭代器,或指向阻止插入的元素的迭代器
*/
iterator insert( const_iterator hint, value_type&& value );

/*
\ brief		插入来自范围 [first, last) 的元素
\ InputIt 	迭代器
\ param		first	要插入的元素范围
\ param		last 	要插入的元素范围
*/
template< class InputIt >
void insert( InputIt first, InputIt last );

/*
\ brief		若容器中无拥有该关键的元素,则插入以给定的 args 原位构造的新元素到容器
\ ... Args  可变参数包
\ param		要转发给元素构造函数的参数
\ return	返回由指向被插入元素,或若不发生插入则为既存元素的迭代器,
			和指代插入是否发生的 bool (若发生插入则为 true ,否则为 false )。
*/
template< class... Args >
std::pair<iterator,bool> emplace( Args&&... args );

/*
\ brief		插入元素到尽可能靠近正好在 hint 之前的位置。原位构造元素,即不进行复制或移动操作
\ ... Args  可变参数包
\ param		hint	指向将插入新元素到其前的位置的迭代器
\ param		args 	转发给元素构造函数的参数
\ return	返回指向新插入元素的迭代器
*/
template <class... Args>
iterator emplace_hint( const_iterator hint, Args&&... args );

/*
\ brief		移除位于 pos 的元素
\ param		指向要移除的元素的迭代器
*/
void erase( iterator pos );

/*
\ brief		移除位于 pos 的元素
\ param		指向要移除的元素的迭代器
\ return	后随最后被移除的元素的迭代器
*/
iterator erase( const_iterator pos );
iterator erase( iterator pos );

/*
\ brief		移除范围 [first; last) 中的元素,它必须是 *this 中的合法范围
\ param		first	要移除的元素范围
\ param		last 	要移除的元素范围
*/
void erase( iterator first, iterator last );

/*
\ brief		移除范围 [first; last) 中的元素,它必须是 *this 中的合法范围
\ param		first	要移除的元素范围
\ param		last 	要移除的元素范围
\ return	后随最后被移除的元素的迭代器
*/
iterator erase( const_iterator first, const_iterator last );

/*
\ brief		移除关键等于 key 的元素
\ param		要移除的元素关键值
\ return	被移除的元素数
*/
size_type erase( const key_type& key );

/*
\ brief		返回拥有关键 key 的元素数
\ param		要计量元素数的关键值
\ return	拥有比较等价于 key 或 x 的关键的元素数,对于 (1) 为 1 或 0
*/
size_type count( const Key& key ) const;

/*
\ brief		寻找键等于 key 的的元素
\ return	指向键等于 key 的元素的迭代器。若找不到这种元素,则返回尾后(见 end() )迭代器
*/
iterator find( const Key& key );
const_iterator find( const Key& key ) const;

/*
\ brief		比较关键与 key,返回容器中所有拥有给定关键的元素范围
\ param		要比较元素的关键值
\ return	含一对定义所需范围的迭代器的 std::pair :第一个指向首个不小于 key 的元素,
													第二个指向首个大于 key 的元素
*/
std::pair<iterator,iterator> equal_range( const Key& key );
std::pair<const_iterator,const_iterator> equal_range( const Key& key ) const;

/*
\ brief		返回指向首个不小于 key 的元素的迭代器
\ param		要与元素比较的关键值
\ return	指向首个不小于 key 的元素的迭代器
*/
iterator lower_bound( const Key& key );
const_iterator lower_bound( const Key& key ) const;

/*
\ brief		返回指向首个大于 key 的元素的迭代器
\ param		与元素比较的关键值
\ return	指向首个大于 key 的元素的迭代器
*/
iterator upper_bound( const Key& key );
const_iterator upper_bound( const Key& key ) const;

/*
\ brief		返回用于比较关键的函数对象,它是此容器构造函数参数 comp 的副本
\ return	比较关键的函数对象
*/
key_compare key_comp() const;

/*
\ brief		返回比较 std::map::value_type (关键-值 pair )对象的函数对象,
								它用 key_comp 比较 pair 的第一组分
\ return	比较值的函数对象							
*/
std::map::value_compare value_comp() const;


文章时间2019年12月9日15:03:46

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!