初识STL——set,multiset,map,multimap

最近在学习STL,在前期分析了vector和list的源码,印象很深,感觉对自己以后的代码之路产生了很多改变,今天,介绍下STL当中的几个关联式容器。本博客所有论述的都为SGI版本的STL。

1.什么是关联式容器


关联容器是通过键存取和读取元素、顺序容器通过元素在容器中的位置顺序存储和访问元素。因此,关联容器不提供front、push_front、pop_front、back、push_back以及pop_back,此外对于关联容器不能通过容器大小来定义,因为这样的话将无法知道键所对应的值什么。

关联式容器分为set(集合)和map(映射表)两大类,还有拓展的multiset(多键集合)和multimap(多键映射表)。这些容器的底层实现都是使用了红黑树来实现的。

另外,STL还提供了hash_table(散列表),hash_set(散列集合),hash_map(散列映射表),hash_multiset(散列多键集合),hash_multimap(散列多键映射表)。这些都是利用hash表实现的。
这里写图片描述
总共9个容器。

另外来说,在C++11当中,新的标准重新定义了4个无序的关联式容器,就是unordered_map,unordered_set,unordered_multiset,unordered_multimap,

所以在介绍容器之前你首先应该有红黑树的知识,不熟悉可以翻一下前面的博客,对平衡树方面都有论述!

2.set


我们首先来看set,重点来熟悉一下set的接口。

这里写图片描述

这些接口当中,很多我们使用很简单,比如像是关于容量的接口。

在这我们说下insert。

pair<iterator,bool> insert ( const value_type& x );
           iterator insert ( iterator position, const value_type& x );
template <class InputIterator>
      void insert ( InputIterator first, InputIterator last );

这里面的pair就是一个key-value的结构体。这个结构体的定义是这样的:

template<typename K,typename V>
struct pair
{
    K first;
    V value;
}

在这里因为value是不存在的。所以返回以后的first就是迭代器,value就是bool类型。

我们可以通过测试:

    std::set<int> num;

    cout << num.empty() << endl;

    num.insert(1);
    num.insert(5);
    pair<set<
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值