您的位置:首页 > 其它

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 (成员变量和成员函数)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: