STL之set和map
by attack666
set与map
map
内部实现是一棵红黑树
- 定义
key和value分别对应着两种类型
map<key, value> mp;
- 内部函数
直观的理解就是一种加强的数组。
begin()--返回指向第一个元素的迭代器end()--返回指向最后一个元素的迭代器find()--返回一个指向被查找到元素的迭代器size()--集合中元素的数目clear()--清除所有元素count()--返回某个值元素的个数empty()--如果集合为空,返回truelower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器upper_bound()--返回大于某个值元素的迭代器
- 迭代器
map<int, int>::iterator mit;
//mit = mp.begin();
mp[] = ;
mp[] = ;
//++ 把当前迭代器后移
//-- 前移 找到比他小的"位置"
for(mit = mp.begin(); mit != mp.end(); mit++) {
//mit->second = 233;
cout << mit->first << ' ' << mit->second << '\n';
}
for(auto &x: mp) {//&
//x.second = 233;
//考虑如果在这儿套一个二分的复杂度
cout << x.first << ' ' << x.second << '\n';
}
for(auto x = mp.begin(); x != mp.end(); x++) {
cout << x->first << ' ' << x->second << '\n';
}
- unordered_map
#include<tr1/unordered_map>
- cc_hash_table
MingW/4.8.1/include/c++/ext/pb_ds
set
begin();//返回的是第一个元素的迭代器end();insert(x);//pair<set<int>::iterator, bool>> second = 0说明已经有该元素/否则成功插入size();find(x);//若能找到返回迭代器,否则返回end()count(x);//出现次数,因为set的性质,所以只有0/1lower_bound(x);//>=x的iteratorupper_bound(x);//>x的iteratorerase(x);//删除x。
#include<bits/stdc++.h>
#include<tr1/unordered_map>
using namespace std;
set<int> s;
//本质上是一个集合
//集合中的元素互不相同
set<int>::iterator sit;
int main() {
s.insert();
s.insert();
s.insert();
// cout << s.insert(3).second << '\n';
// cout << s.size() << '\n';
// cout << *s.lower_bound(5) << '\n';
// cout << *s.upper_bound(5) << '\n';
// cout << *s.lower_bound(10) << '\n';
s.erase();
cout << *s.begin() << '\n';
cout << *s.end() << '\n';
/*
for(auto &x: s) {
cout << x << '\n';
}
for(sit = s.begin(); sit != s.end(); sit++) {
cout << *sit << '\n';
}
*/
;
}
multiset
多重集合,与set唯一的区别就是支持插入多个相同的数
此时使用.count(x)函数可以获取到x的出现次数
同时.size()函数也会相应改变
非常重要的一点,关于erase函数,如果直接删除某个数,会全部删除,因此我们往往是来删除一个迭代器,这样就可以每次只删除一个
void Erase(int x) {
auto it = s.find(x);
s.erase(it);
}
STL之set和map的更多相关文章
- STL模板中的map的使用与例题
最近的计分赛,记得自己的都只是过了两题.遇到了两次map,自己在寒假看了一点的map,只知道在字符串匹配的时候可以用的到.但是自己对map的使用还是不够熟练使用,这回在第一次和第二次的计分赛中都遇到可 ...
- 带你深入理解STL之Set和Map
在上一篇博客带你深入理解STL之RBTree中,讲到了STL中关于红黑树的实现,理解起来比较复杂,正所谓前人种树,后人乘凉,RBTree把树都种好了,接下来就该set和map这类关联式容器来" ...
- 《STL系列》之map原理及实现
上一篇文章<STL系列>之vector原理及实现,介绍了vector的原理及实现,这篇文章介绍map的原理及实现.STL实现源码下载.STL中map的实现是基于RBTree的,我在实现的时 ...
- STL源码中map和set中key值不能修改的实现
前言 最近正好刚刚看完,<stl源码剖析>这本书的map和set的源码部分.但是看完之后又突然发现,之前怎么没有注意到map和set容器中key不能修改是怎么实现的.故,特此整理如下. s ...
- STL的pair学习, map学习
http://blog.csdn.net/calvin_zcx/article/details/6072286 http://www.linuxidc.com/Linux/2014-10/107621 ...
- STL中set和map
set 可以认为是数学上的集合,集合中的元素不允许有重复.set特有的操作是高效的插入.删除和执行基本查找. set的插入方法是 insert,由于集合元素的唯一性,insert操作不一定会成功,in ...
- STL中stack/queue/map以及Boost unordered_map 的使用方法
一.stackstack 模板类的定义在<stack>头文件中.stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型 ...
- 标准模板库(STL)学习指南之map映射
转载自CSDN博客:http://blog.csdn.net/bat603/article/details/1456141 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关 ...
- 关于C++ STL标准库中map 的多元素应用
map的特性是,所有的元素会根据键值自动排序.map的所有元素都是pair,同时拥有实值(value)和键值(key).pair的第一个元素被视为键值,第二个被视为实质piar 的定义 templat ...
- C/C++知识要点2——STL中Vector、Map、Set容器的实现原理
1.Vector是顺序容器.是一个动态数组.支持随机存取.插入.删除.查找等操作,在内存中是一块连续的空间.在原有空间不够情况下自己主动分配空间.添加为原来的两倍.vector随机存取效率高,可是在v ...
随机推荐
- centos yum install oracle java
How to install Java on CentOS 7 | Linuxizehttps://linuxize.com/post/install-java-on-centos-7/ CentOS ...
- Linux的基本解读
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统 而严格来讲,Linux这个词本身只表示Linux内核,但实际上人 ...
- ResultHandler的用法
ResultHandler,顾名思义,对返回的结果进行处理,最终得到自己想要的数据格式或类型.也就是说,可以自定义返回类型.下面通过一个例子讲解它的使用方法: 创建Goods实体类: public c ...
- C# Note4:XML序列化和反序列化(含加密解密等)
前言 在项目中,我们经常用到各种配置文件,比如xml文件.binary文件等等,这里主要根据实践经验介绍下xml文件的序列化和反序列化(毕竟最常用). 实践背景:我要做一个用户管理功能,用户账号信息存 ...
- Client将数据读写HDFS流程
HDFS介绍 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的. 什么是分布式文件系统 分布式文件系统(Dist ...
- Redis事物
redis事物定义: >Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断. >Redis事务的主要作 ...
- synchronized与volatile的区别及各自的作用、原理(学习记录)
synchronized与volatile的区别,它们的作用及原理? 说到两者的区别,先要了解锁提供的两种特性:互斥(mutual exclusion) 和可见性(visibility). 互斥:即一 ...
- 老男孩python学习自修第十五天【常用模块之time】
例如: #!/usr/bin/env python # _*_ coding:UTF-8 _*_ import time if __name__ == "__main__": pr ...
- Java面向对象之多态的静态和动态实现
简单而言: 静态多态:即为重载,方法的重载 动态多态:即为重写/覆盖,方法的重写
- LODOP循环多任务 同模版只设置不同队列任务名
LODOP中从PRINT_INIT(或PRINT_INITA)到最后PRINT(或PREVIEW等),是一个任务,关于Lodop中一个任务,以及一个任务中可以包含哪些语句,详细可查看本博客另一篇博文: ...