C++STL之关联容器【map】【set】

map以键-值対的形式组织,键的作用在于索引,而值表示所存储和读取数据。

set仅包含一个键,并且有效的支持某个键是否存在的查询。

他们都是基于标准型类库pair实现,该类型在utility头文件中。

一:关于pair类型的操作

pair<T1,T2> p1; //创建一个空pair类型

pair<T1,T2> p1(v1,v2); //创建并初始化

make_pair(v1,v2) //生成pair对象

<,>,==,!=  //类型之间比较,遵循字典序,先比较first后second

p.first() //返回first成员,

p.second() //返回second成员

同时还支持一些容器的基本操作

#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stack>
#include <utility>
#include <string>
#include <map>
#include <iostream>
using namespace std;

int main()
{
    pair<int,int> p;
    p = make_pair(1,2) ;
    pair<int,string> p1(1,"sttttaa");
    string y;int x;
    pair<string,vector<int> > line;
    cout<<p1.first<<" "<<p1.second<<endl;
    while(cin>>x>>y)
    {
        p1=make_pair(x,y);
    }

    return 0;
}

二:map容器及set容器

1:构造函数及其定义的类型

map<k,v> m; 定义空的map

map<k,v> m(m2); 定义map初始化为m的副本

map<k,v> m(b,e); 定义map初始化为一个迭代器b到e的副本

返回类型

map<k,v>::key_type; 键的类型

map<k,v>::mapped_type; 值的类型

map<k,v>::value_type; 一个pair类型

2:常用操作

支持insert的三种常用插入元素,先查找,不在的话插入

支持直接下标操作元素

m.count(v); 返回键v在m中的值的个数

m.find(v); 返回一个迭代器,如果存在返回位置,否则指向尾

支持erase三种常用删除操作

支持容器常用遍历

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <map>
#include <cmath>
#include <map>
#include <utility>
#include <set>
using namespace std;
#define Del(a,b) memset(a,b,sizeof(a))

int main()
{
    map<string,int> m;  //创建
    m["yangdangl"]=5;//插入
    m.insert(map<string,int>::value_type("Ann",1));
    m["jame"]=6,m["wade"]=3;
    pair<string,int> p("james",6);
    string s="dasds";int t=200;
    p = make_pair(s,t);
    map<string,int>::iterator it;
    for(it=m.begin();it!=m.end();it++) //遍历
    {
        cout<<it->first<<" "<<it->second<<endl;
    }//查找
    cout<<m.count("jame")<<endl;
    it=m.find("yangdnagl");
    if(it!=m.end())
        cout<<it->second<<endl;
    m.erase("wade");m.erase(m.begin());
    for(it=m.begin();it!=m.end();it++) //遍历
    {
        cout<<it->first<<" "<<it->second<<endl;
    }
    m.erase(m.begin(),m.end());
    m.clear();
    return 0;
}

三:multimap和multiset

多重映射容器,即一个键可以对应多个值

其支持map和set的大多数操作,但是都不支持下标操作。

由于multimap中可能存在一个键对应多个值,而这多个值是相邻存放的,那么我们查找的时候可能需要查找到一个范围,这里介绍三个函数。

m.lower_bound(k); 返回一个迭代器,指向不小于的第一个元素

m.upper_bound(k); 返回一个迭代器,指向大于k的第一个元素

m.equal_range(); 返回一个pair类型,第一个值为lower_bound()结果,第二个为upper_bound()结果。

C++STL之关联容器【map】【set】

时间: 2024-10-13 21:46:28

C++STL之关联容器【map】【set】的相关文章

C++学习STL之关联容器 --- pair、map、set

本博文我们继续讨论标准模板库STL的关联容器: 主要有:pair.map.set. 一:pair pair是一种简单的关联类型,不属于容器范围.而是代表一个 key-value键值对. 创建.初始化.操作 示例代码如下: 1 #include <iostream> 2 #include <string> 3 #include <vector> 4 using namespace std; 5 //将pair放入容器&initpair 6 int main(int

初探STL之关联容器

关联容器 分类:set, multiset, map, multimap 特点:内部元素有序排列,新元素插入的位置取决于它的值,查找速度快. 常用函数: find: 查找等于某个值 的元素(x小于y和y小于x同时不成立即为相等) lower_bound : 查找某个下界 upper_bound : 查找某个上界 equal_range : 同时查找上界和下界 count :计算等于某个值的元素个数(x小于y和y小于x同时不成立即为相等) insert: 用以插入一个元素或一个区间 set 特点:

STL之关联容器的映射底层

STL的关联容器有set, map, multiset, multimap.用于实现它们的底层容器有划入标准的rb_tree和待加入标准的hashtable. 底层容器rb_tree为上层容器提供了一种有序的服务.关键步骤时间复杂度为O(lgN); 底层容器hashtable为上层容器提供的是无序的服务,但其关键步骤的时间复杂度为O(1). 那么上层容器是怎么映射到底层容器中去的呢?下面以set和map为例,说明它们是如何映射到rb_tree和hashtable的. 1 rb_tree模板头 对

0717-----C++Primer听课笔记----------STL之关联容器

1.Map 1.1 map<K, V>是一种pair的容器,pair的种类是pair<K, V>.map采用下标访问一个已存在的key, 会更新value,访问map中不存在的元素时,会增加一个新的键值对.map中的元素按照key进行从小到大排列.map的底层实现是采用二叉树,一般是使用红黑树. #include <iostream> #include <string> #include <map> using namespace std; /*

C++关联容器&lt;map&gt;简单总结

C++关联容器<map>简单总结 map提供大小可变的关联容器,基于关联键值高效检索元素值.当你处理键值对的数据是,都可以考虑使用map关联容器. 特点: 大小可变的关联容器,基于关联键值高效检索元素值. 可逆,因为它提供双向迭代器来访问其元素. 有序,因为它的元素根据指定的比较函数按键值排序. 唯一. 因为它的每个元素必须具有唯一键. 关联容器对,因为它的元素数据值与其键值不同. 模板类,因为它提供的功能是一般性的功能,与元素或键类型无关. 用于元素和键的数据类型作为类模板以及比较函数和分配

STL 笔记(二) 关联容器 map、set、multimap 和 multimap

STL 关联容器简单介绍 关联容器即 key-value 键值对容器,依靠 key 来存储和读取元素. 在 STL 中,有四种关联容器,各自是: map 键值对 key-value 存储,key 不可反复,即一个 key 仅仅能相应一个 value, 相应头文件<map> multimap 键值对 key-value 存储,key 能够反复,即一个 key 能够相应多个 value, 相应头文件<map> set 仅仅有 key, key 不可反复,相应头文件<set>

STL 笔记(二): 关联容器 map、set、multimap 和 multimap

STL 关联容器简介 关联容器即 key-value 键值对容器,依靠 key 来存储和读取元素.在 STL 中,有四种关联容器,分别是: map 键值对 key-value 存储,key 不可重复,即一个 key 只能对应一个 value, 对应头文件<map> multimap 键值对 key-value 存储,key 可以重复,即一个 key 可以对应多个 value, 对应头文件<map> set 只有 key, key 不可重复,对应头文件<set> mult

关联容器——map、set

map类型通常被称为关联数组,与正常数组类似,不同之处在于其下标不必是整数.我们通过一个关键字而不是位置来查找值(键值对). 与之相对,set就是关键字的简单集合.当只是想知道一个值是否存在时,set是最有用的. 类似顺序容器,关联容器也是模板,为了定义一个map,我们必须指定关键字和值得类型.例:map<string,int>test;一个test的空map,关键字是string.值是int的.set<string> e={"hello"};设置关键字集合,类

STL之关联容器

关联容器支持高效的关键字查找和访问.两个主要的关联容器(associative-container)类型是map和set.标准库提供8个关联容器,它们的不同体现在三个维度上: 或者是一个set,或者是一个map 或者要求不重复的关键字,或者允许重复关键字 按顺序保存元素,或无序保存. 允许重复关键字的容器的开头名字中都包含单词multi:不保持关键字按顺序存储的容器的名字都以单词unordered开头. 类型map和multimap定义在头文件map中:set和multiset定义在头文件set