STL 之 map 关联容器
2013-12-27 16:41
330 查看
map 介绍
map 是一种关联容器,存储相结合形成的一个关键值和映射值的元素。Map 是一种 Pair Associative Container,意味着它的值类型为pair<const Key, Data>. 而且也是 Unique Associative Container, 也就是任何两个元素没有相同的key值。
map 具有重要的属性,就是在 map 对象中插入一个新元素不指向现有元素的迭代器失效。从 map 上删除一个元素,也没有任何迭代器失效,除非,当然,实际上指向正在被删除的元素的迭代器。
map 使用和方法
1. 创建 map 对象
(1) map ()
创建一个没有任何元素的 map 对象,map 中的元素默认是按 key升序排序
map <元素类型, 映射数据类型, greater/less<元素类型>> MapName; // 也可重载 '<' 符号,和自定义仿函数
例如:map <char, int, greater<char>> m;
(2) map (const key_compare& comp)
指定一个比较函数对象 comp 来创建 map 对象, 内存分配为默认
struct strLess
{
bool operator (const char * s1, const char * s2) const
{ return strcmp(s1, s2) < 0;}
}
map <const char*, int> m(strLess());
(3) map (const map&)
map <int, char*> m1;
map <int, char*> m2(m1);
(4) map (InputIterator first, InputIterator last)
用迭代区 [first, last) 创建
pair <const int, char> p1(1, 'a');
pair <const int, char> p2(2, 'b');
pair <const int, char> p3(2, 'c');
pair <const int, char> pairArray[] = {p1, p2, p3};
map <const int, char> m(pairArray. pairArray+3);
2. 元素的插入
(1) pair <iterator, bool> insert (const value_type &v)
重复的 v 值不被插入,返回一个 pair 配对对象。提供插入元素的迭代器位置和插入是否成功的标志
例如:
enumMap.insert(pair<int, Cstring>(1, “One”));
enumMap.insert(map<int, Cstring>::value_type (1, “One”));
(2) iterator insert(iterator position, const value_type& v)
将 v 插入 map 容器,参数 position 值提示在 position 位置之前插入,所返回的插入值视实际情况而定。(不一定能在 position 位置前插入)
(3) void insert (InputIterator first, InputIterator last)
将迭代取件 [first, last) 所指的数据作为由容器元素插入到 map
(4) 利用 map 数组 "[]" 操作符进行元素的插入
map <const char*, floast> m;
map["apple"] = 3.6;
map["orange"] = 3.2;
map["banana"] = 1.8;
3. 元素的删除
(1) void erase (iterator position)
删除 position 所指的元素
(2) size_type erase (const key_type &k)
删除键值为 k 的元素,返回删除的个数 0 或者 1
(3) void erase (iterator first, iterator last)
删除区间 [first, last) 的元素
(4) void clear ()
清空容器中所有元素
4. 元素的遍历
(1) 顺序遍历
iterator begin()
iterator end()
(2) 元素的反向遍历
reverse_iterator rbegin();
reverse_iterator iend()
5. 元素的搜索
(1) count ()
来判定关键字是否出现,其缺点是无法定位数据出现位置,返回值只有两个,要么是0,要么是1
(2) iterator find (const key_type& k) const
搜索到则返回迭代器位置,反之返回 end 结束元素位置;获取的iterator数据类型是一个std::pair对象,包括两个数据。
iterator->first 关键字(key)
iterator->second 存储的数据(value)
(3) lower_bound 与 upper_bound 结合
6. 其他函数
bool empty ():判断是否为空
size_type size () const:容器中元素的个数
void swap (map &):容器交换
lower_bound():上限
upper_bound():下限
pair<iterator, iterator> equal_range(const key_type& k):满足条件的区间
参考资料:
C++ STL之map (成员变量和成员函数)
map 是一种关联容器,存储相结合形成的一个关键值和映射值的元素。Map 是一种 Pair Associative Container,意味着它的值类型为pair<const Key, Data>. 而且也是 Unique Associative Container, 也就是任何两个元素没有相同的key值。
map 具有重要的属性,就是在 map 对象中插入一个新元素不指向现有元素的迭代器失效。从 map 上删除一个元素,也没有任何迭代器失效,除非,当然,实际上指向正在被删除的元素的迭代器。
map 使用和方法
1. 创建 map 对象
(1) map ()
创建一个没有任何元素的 map 对象,map 中的元素默认是按 key升序排序
map <元素类型, 映射数据类型, greater/less<元素类型>> MapName; // 也可重载 '<' 符号,和自定义仿函数
例如:map <char, int, greater<char>> m;
(2) map (const key_compare& comp)
指定一个比较函数对象 comp 来创建 map 对象, 内存分配为默认
struct strLess
{
bool operator (const char * s1, const char * s2) const
{ return strcmp(s1, s2) < 0;}
}
map <const char*, int> m(strLess());
(3) map (const map&)
map <int, char*> m1;
map <int, char*> m2(m1);
(4) map (InputIterator first, InputIterator last)
用迭代区 [first, last) 创建
pair <const int, char> p1(1, 'a');
pair <const int, char> p2(2, 'b');
pair <const int, char> p3(2, 'c');
pair <const int, char> pairArray[] = {p1, p2, p3};
map <const int, char> m(pairArray. pairArray+3);
2. 元素的插入
(1) pair <iterator, bool> insert (const value_type &v)
重复的 v 值不被插入,返回一个 pair 配对对象。提供插入元素的迭代器位置和插入是否成功的标志
例如:
enumMap.insert(pair<int, Cstring>(1, “One”));
enumMap.insert(map<int, Cstring>::value_type (1, “One”));
(2) iterator insert(iterator position, const value_type& v)
将 v 插入 map 容器,参数 position 值提示在 position 位置之前插入,所返回的插入值视实际情况而定。(不一定能在 position 位置前插入)
(3) void insert (InputIterator first, InputIterator last)
将迭代取件 [first, last) 所指的数据作为由容器元素插入到 map
(4) 利用 map 数组 "[]" 操作符进行元素的插入
map <const char*, floast> m;
map["apple"] = 3.6;
map["orange"] = 3.2;
map["banana"] = 1.8;
3. 元素的删除
(1) void erase (iterator position)
删除 position 所指的元素
(2) size_type erase (const key_type &k)
删除键值为 k 的元素,返回删除的个数 0 或者 1
(3) void erase (iterator first, iterator last)
删除区间 [first, last) 的元素
(4) void clear ()
清空容器中所有元素
4. 元素的遍历
(1) 顺序遍历
iterator begin()
iterator end()
(2) 元素的反向遍历
reverse_iterator rbegin();
reverse_iterator iend()
5. 元素的搜索
(1) count ()
来判定关键字是否出现,其缺点是无法定位数据出现位置,返回值只有两个,要么是0,要么是1
(2) iterator find (const key_type& k) const
搜索到则返回迭代器位置,反之返回 end 结束元素位置;获取的iterator数据类型是一个std::pair对象,包括两个数据。
iterator->first 关键字(key)
iterator->second 存储的数据(value)
(3) lower_bound 与 upper_bound 结合
6. 其他函数
bool empty ():判断是否为空
size_type size () const:容器中元素的个数
void swap (map &):容器交换
lower_bound():上限
upper_bound():下限
pair<iterator, iterator> equal_range(const key_type& k):满足条件的区间
参考资料:
C++ STL之map (成员变量和成员函数)
相关文章推荐
- 【STL容器学习】-关联容器与map的用法
- STL 笔记(二) 关联容器 map、set、multimap 和 multimap常用函数
- STL2—关联容器map基础总结
- STL 关联容器之map(有序且键唯一)
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- STL之关联容器(pair、map、set的使用)
- STL 笔记(二) 关联容器 map、set、multimap 和 multimap
- C++之STL(6)之 map 与 multimap 关联容器
- stl之关联容器——set,map,hashtable
- STL关联容器之Map
- STL中关联容器map的用法详解
- STL的基本使用之关联容器:map和multiMap的基本使用
- STL之关联容器(set /map /multiset /multimap)
- STL之关联容器(pair、map、set的使用)
- STL::map关联容器
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- STL关联容器之map
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- STL容器--关联容器map
- 【STL】关联容器 — hash_map