标签:
本篇文章在上一篇文章的基础上进一步介绍一些常用的容器。
?
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>是一个函数式对象,代表了排序函数,分配器通常为默认分配器。
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); |
map1.insert(std::make_pair(4,‘d‘); |
map1[5] = ‘e‘; |
iterator erase(iterator it); | 1 通过一个条目对象删除 |
iterator erase(iterator first, iterator last);???????? | 2 删除一个范围 |
size_type erase(const Key& key); | 3 通过键删除 |
char &e = map1[2]; e = ‘c‘; |
需要注意的是,通过下标访问的方法和插入操作在语法上没有区别,如过使用了一个没有被定义过的键,则会创建一个新的键值对,这通常不是我们所说希望的。因此有第二种方案。
map.count(k) | 返回map中键k的出现次数(对于map而言,由于一个key对应一个value,因此返回只有0和1,因此可以用此函数判断k是否在map中) |
map.find(k) | ??返回map中指向键k的迭代器,如果不存在键k,则返回超出末端迭代器(map1.end())。 |
和Map基本一致,但是允许出现重复的Key。由于可以出现重复的Key,在Map中可以进行的[]访问和[]插入操作将不能进行而只能通过迭代器和insert()的方式去执行。
Set也是一种关联容器,存储的对象可以看做是既作为Key又作为Value。Set和Map非常相似。它实现了红黑树的搜索结构。
同理,Set中所存储的键对象必须是可排序的,默认采用从小到大的排序方式(必须有operator<)。也可以通过函数对象的方式进行指定。set的标准头为:
template <class _Kty,class _Pr = less<_Kty>,class _Alloc = allocator<Pair< _Kty>>> class map {...} |
其中的less<_Kty>是一个函数式对象,代表了排序函数,分配器通常为默认分配器。
struct betterthan{ ????bool operator()(char a1,char a2){ ????????return a1>a2?1:0; ????} } const char items[3] = { ????‘a‘,‘b‘,‘c‘ } std::set<char,betterthan> set1(item,item+3); |
set1.insert(‘d‘); |
iterator erase(iterator it); | 1 通过一个条目对象删除 |
iterator erase(iterator first, iterator last);???????? | 2 删除一个范围 |
size_type erase(const Key& key); | 3 通过键值直接删除 |
标签:
原文地址:http://www.cnblogs.com/shawnChi/p/5797799.html