码迷,mamicode.com
首页 > 其他好文 > 详细

[GeekBand] STL与泛型编程(2)

时间:2016-08-23 01:38:40      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

本篇文章在上一篇文章的基础上进一步介绍一些常用的容器。

一、 Stack和Queue

?

二、 Map

Map是一种关联容器,存储的对象是键值(Key-Value)对。和Python中的字典相似。Map中的键值对永远是排好序的。

Map中所存储的键对象必须是可排序的,默认采用从小到大的排序方式。也可以通过函数对象的方式进行指定。Map的标准头为:

template <class _Kty, class _Ty,class _Pr = less<_Kty>,class _Alloc = allocator<Pair<const _Kty,_Ty>>>

class map {...}

其中的less<_Kty>是一个函数式对象,代表了排序函数,分配器通常为默认分配器。

2.1 Map的创建

通过Pair和迭代器创建并初始化,其中Pair的第一个值为键,第二个值为值。

const std::pair<int ,char>items[3] = {

????std::make_pair(1,‘a‘),std::make_pair(2,‘b‘),std::make_pair(3,‘c‘)

}

std::map<int,char> map1(item,item+3);

2.2 Map的元素插入

1 通过insert成员函数

map1.insert(std::make_pair(4,‘d‘);

2 直接使用未使用的下标

map1[5] = ‘e‘;

2.3 Map的元素删除

iterator erase(iterator it);

1 通过一个条目对象删除

iterator erase(iterator first, iterator last);????????

2 删除一个范围

size_type erase(const Key& key);

3 通过键删除

2.4 Map的元素访问

1. 通过key和引用访问

char &e = map1[2];

e = ‘c‘;

需要注意的是,通过下标访问的方法和插入操作在语法上没有区别,如过使用了一个没有被定义过的键,则会创建一个新的键值对,这通常不是我们所说希望的。因此有第二种方案。

2. 通过成员函数和迭代器

map.count(k)

返回map中键k的出现次数(对于map而言,由于一个key对应一个value,因此返回只有01,因此可以用此函数判断k是否在map)

map.find(k)

??返回map中指向键k的迭代器,如果不存在键k,则返回超出末端迭代器(map1.end())

2.5 Multimap

和Map基本一致,但是允许出现重复的Key。由于可以出现重复的Key,在Map中可以进行的[]访问和[]插入操作将不能进行而只能通过迭代器和insert()的方式去执行。

三、Set

Set也是一种关联容器,存储的对象可以看做是既作为Key又作为Value。Set和Map非常相似。它实现了红黑树的搜索结构。

同理,Set中所存储的键对象必须是可排序的,默认采用从小到大的排序方式(必须有operator<)。也可以通过函数对象的方式进行指定。set的标准头为:

template <class _Kty,class _Pr = less<_Kty>,class _Alloc = allocator<Pair< _Kty>>>

class map {...}

其中的less<_Kty>是一个函数式对象,代表了排序函数,分配器通常为默认分配器。

3.1 Set的创建

通过迭代器/指针创建并初始化。

struct betterthan{

????bool operator()(char a1,char a2){

????????return a1>a2?1:0;

????}

}

const char items[3] = {

????‘a‘‘b‘‘c‘

}

std::set<charbetterthan> set1(item,item+3);

3.2 Set的元素插入

通过insert成员函数

set1.insert(‘d‘);

3.3 Set的元素删除

iterator erase(iterator it);

1 通过一个条目对象删除

iterator erase(iterator first, iterator last);????????

2 删除一个范围

size_type erase(const Key& key);

3 通过键值直接删除

[GeekBand] STL与泛型编程(2)

标签:

原文地址:http://www.cnblogs.com/shawnChi/p/5797799.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!