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 ...
随机推荐
- 快速失败/报错机制 - fail-fast
一.快速报错机制(fail-fast) 这是<Java编程思想>中关于快速报错机制的描述 Java容器有一种保护机制,能够防止多个进程同时修改同一个容器的内容.如果在你迭代遍历容器的过程中 ...
- Java 读取配置文件数据
Properties类 Properties类,是一个工具类,包含在java.util包中. 功能:可以保存持久的属性,通常用来读取配置文件或者属性文件,将文件中的数据读入properties对象中, ...
- 分析一个react项目
目录结构 下面是使用npx create-react-app web-app来创建的一个项目(已经删除了多余的文件) web-app ├── node_modules │ ├── ....... ...
- html,css学习实践总结
网页的布局方式 1.什么是网页的布局方式? 网页的布局方式其实就是指浏览器是如何对网页中的元素进行排版的 1.标准流(文档流/普通流)排版方式 1.1其实浏览器默认的排版方式就是标准流的排版方式 1. ...
- java 8 jvm 内存配置
jdk8内存参数解析与修改(新的参数) - LikeTech - CSDN博客https://blog.csdn.net/lk7688535/article/details/51767333 Java ...
- python3 网页下拉框和悬浮框操作基础汇总
#悬浮定位操作 from selenium.webdrier import ActionChains #浏览器实例化 #定位移动的位置赋给一个参数 ActionChains(浏览器).move_to_ ...
- Eclipse中Maven的简单使用
一.Maven的安装 检查自己的电脑是否安装了maven,在cmd中输入 mvn -v 命令即可查看 安装配置maven 1.解压部署Maven核心程序 ①检查JAVA_HOME环境变量 C:\Wi ...
- Spring boot + mybatis + orcale实战(干货)
废话少说,直接上步骤: 第一步:安装好IDEA(此处省略) 第二步:在IDEA新建springboot工程 第三步:在springboot工程的pom.xml添加oracle和mybait依赖 < ...
- 将Vue移动端项目打包成手机app---HBuilder
将移动端页面打包成app 1.使用 HBuilder 直接编译打包 点击左上角 文件>打开目录>选择目录 选择用Webpack打包好的dist文件目录 由于我添加到项目了,所以会显示该项 ...
- 一、hadoop部署
一.Java环境 yum 安装方式安装 1.搜索JDK安装包 yum search java|grep jdk 2.安装 yum install java-1.8.0-openjdk-src.x86_ ...