STL学习----入门(1)[map]
来源:互联网 发布:开80端口 编辑:程序博客网 时间:2024/05/16 06:38
接着上文:
#include<map>:
- // <map>
- template < class Key,
- class T,
- class Compare = less<Key>,
- class Alloc = allocator<pair<const Key,T> >
- > class map;
映射表(Map)容器是一个按特定顺序存储以键值对组合而成的元素的关联容器(Associative container)。
A map is an associative container that supports unique keys (contains at most one of each key value) and provides for fast retrieval of values of another type T based on the keys.
容器特性:
关联(Associative)
关联容器中的元素是通过主键(Key)而不是它们在容器中的绝对位置来引用的。
有序(Ordered)
容器中的元素在任意时刻都遵循一个严格排序规则。所有插入的元素都按该排序规则获得对应的位置。
映射(Map)
每个元素为一个值(Mapped value)绑定一个键(Key):以主键来标志主要内容等于被映射值的元素。
键唯一(Unique keys)
容器中不存在两个元素有相同的主键。
能够感知内存分配器的(Allocator-aware)
容器使用一个内存分配器对象来动态地处理它的存储需求。
模板参数
Key
主键的类型。
在类模板内部,使用其别名为 key_type 的成员类型。
T
被映射的值的类型。
在类模板内部,使用其别名为 mapped_type 的成员类型。
Compare
一个二元谓词,以两个元素的主键为参数返回一个 bool 值。
可以是函数指针(Function pointer)类型或函数对象(Function object)类型。
在类模板内部,使用其别名为 key_compare 的成员类型。
Alloc
容器内部用来管理内存分配及释放的内存分配器的类型。
这个参数是可选的,它的默认值是 std::allocator<T>,这个是一个最简单的非值依赖的(Value-independent)内存分配器。在类模板内部,使用其别名为 allocator_type 的成员类型。
详细说明
在一个映射表容器中,主键通常被用来排序及唯一标志一个元素,而被映射的值保存了与该主键关联的内容。主键与被映射值的类型可以不同,在模板内部,这两种类型合并绑定成成员类型 value_type。由上述描述可知,value_type 是一个双元组类型(Pair type),具体定义如下:
- typedef pair<const Key, T> value_type;
map 容器中的所有元素都是按由类型为 Compare 的比较对象指定的严格弱序规则排序的。
在用主键访问单个元素时,map 容器通常比unordered_map 容器低效,但 map 容器允许按顺序直接对某个子集进行迭代。
map 容器通常被实现为一个二叉搜索树(及其变型),该数据结构具有对数据自动排序的功能。
在所有关联容器中,map 容器唯一具有的一个特点:实现了直接访问操作符(operator[]),使得可以直接访问被映射的值。
map 容器支持双向迭代。
The map class supports bidirectional iterators.
成员类型
成员类型 定义 key_type第一个模板参数 Keymapped_type第二个模板参数 Tvalue_typestd::pair<const Key, T>size_type无符号整数类型(通常为 size_t)difference_type有符号整数类型(通常为 ptrdiff_t)key_compare第三个模板参数 Compareallocator_type第四个模板参数 AllocreferenceAllocator::reference 已弃用
value_type& C++11const_referenceAllocator::const_reference 已弃用
const value_type& C++11pointerAllocator::pointer 已弃用
std::allocator_traits<Allocator>::pointer C++11const_pointerAllocator::const_pointer 已弃用
std::allocator_traits<Allocator>::const_pointer C++11iterator双向迭代器const_iterator常双向迭代器reverse_iteratorstd::reverse_iterator<iterator>const_reverse_iteratorstd::reverse_iterator<const_iterator>成员函数
(constructor)创建 map(destructor)释放 mapoperator=值赋操作Iterators:
begin返回指向容器起始位置的迭代器(iterator)end返回指向容器末尾位置的迭代器rbegin返回指向容器逆序起始位置的逆序迭代器(reverse_iterator)rend返回指向容器逆序末尾位置的逆序迭代器cbeginC++11返回指向容器起始位置的常迭代器(const_iterator)cendC++11返回指向容器末尾位置的常迭代器crbeginC++11返回指向容器逆序起始位置的常逆序迭代器(const_reverse_iterator)crendC++11返回指向容器逆序末尾位置的常逆序迭代器Capacity:
size返回有效元素个数max_size返回 map 支持的最大元素个数empty判断是否为空Element access:
operator[]访问元素at C++11访问元素Modifiers:
insert插入元素erase删除元素swap交换内容clear清空内容emplaceC++11构造及插入一个元素emplace_hintC++11按提示构造及插入一个元素Observers:
key_comp返回键比较对象value_comp返回值比较对象Operations:
find通过给定主键查找元素count返回匹配给定主键的元素的个数lower_bound返回指向容器中第一个主键等于给定搜索值或在给定搜索值之后的元素的迭代器upper_bound返回指向容器中第一个主键在给定搜索值之后的元素的迭代器equal_range返回值匹配给定搜索值的元素组成的范围Allocator:
get_allocator获得内存分配器非成员函数
operator==、operator!=、operator<、operator<=、operator>、operator>=
关系操作符std::swap交换两个映射表容器的内容算法相关
<algorithm> 头文件中包含大量与 map 容器相关的算法,常使用的有
搜索算法std::adjacent_find、std::count、
std::count_if、std::find、
std::find_if、std::find_end、
std::find_first_of、std::search、
std::search_n、std::equal、
std::mismatch二分查找(Binary search)std::lower_bound、std::upper_bound、
std::equal_range、std::binary_search集合(Set)操作std::includes、std::set_difference、
std::set_intersection、std::set_union、
std::set_symmetric_difference最大与最小std::min_element、std::max_element字典序比较std::lexicographical_compare排列生成器std::next_permutation、
std::prev_permutation其它操作std::all_of、std::any_of、std::none_of、
std::for_each、std::copy、std::copy_if、
std::copy_n、std::copy_backward、
std::move、std::move_backward、
std::swap_ranges、std::iter_swap、
std::transform、std::replace、
std::replace_if、std::replace_copy、
std::replace_copy_if、std::fill、
std::fill_n、std::generate、
std::generate_n、std::remove、
std::remove_if、std::unique、
std::unique_copy、std::reverse、
std::reverse_copy、std::rotate、
std::rotate_copy、std::random_shuffle、
std::shuffle、std::partition、
std::is_partitioned、std::stable_partition、
std::partition_copy、std::merge
- STL学习----入门(1)[map]
- STL(MAP入门应用)
- STL学习之map容器(1)
- STL学习----入门(1)[algorithm]
- STL学习----入门(1)[deque]
- STL学习----入门(1)[functional]
- STL学习----入门(1)[Vector]
- STL学习----入门(1)[iterator]
- STL学习----入门(1)[array]
- STL学习----入门(1)[list]
- STL学习----入门(1)[forward_list]
- STL学习----入门(1)[unordered_map]
- STL学习----入门(1)[memory]
- STL学习----入门(1)[numeric]
- STL学习----入门(1)[queue]
- STL学习----入门(1)[set]
- STL学习----入门(1)[unordered_set]
- STL学习----入门(1)[stack]
- MS sql 小技巧
- linux vnc服务配置详细教程
- C# interface 接口理解
- SPOJ VLATTICE Visible Lattice Points (莫比乌斯反演基础题)
- 运行hadoop程序遇到的一些问题及解决方案
- STL学习----入门(1)[map]
- 发布MQTT消息究竟有多快?
- 深圳市居住证查询、办理政府网址
- sql over函数使用
- Android获得屏幕分辨率的两种方法
- Android基础类之BaseAdapter
- 自定义jQValidate校验规则
- Android:TabHost实现Tab切换
- R语言-差分要注意的问题