摘自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
来源:CSDN
作者:清晨与猫鱼
链接:https://blog.csdn.net/BCMY0110/article/details/103453625