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 ...
随机推荐
- Golang中进行reslice时的注意事项
先看下面代码: package main import "fmt" func main() { slice := []int{0, 1, 2, 3, 4, 5, 6, 7, 8} ...
- 【学习总结】【Java】Git学习-上传本地已有代码到GitHub
< Git学成归来后的第一次实战 > 上传本地已有代码到GitHub 以之前学了一小半的Java基础教程代码为例 <深坑预警:在GitHub新建仓库那一步,不要勾选readme,不然 ...
- 消除element.style { }
1.在写前台页面时,我们会发现控制台里会自动出现一些样式覆盖掉我们定义的样式: 解决的办法: 把被覆盖的样式单独定义出来,并在样式后面加上 !important,表示高优先级.
- CentOS下配置SS5(SOCKS5)代理服务器
方案:使用开源的SS5( Socks Server 5 ) 官网:http://ss5.sourceforge.net/ (点击左侧的Software在右侧的Server处进入下载地址) CentOs ...
- Nginx三部曲(3)SSL
我们将告诉你 Nginx 的运作模式.蕴含的概念,怎样通过调优 Nginx 来提高应用性能,或是如何设置它的启动和运行. 这个教程有三个部分: 基本概念 —— 这部分需要去了解 Nginx 的一些指令 ...
- react 路由 react-router-dom
import React from 'react'; import DataList from './data' import Tr from './Tr' // import One from '. ...
- Gevent 性能和 gevent.loop 的运用和带来的思考
知乎自己在底层造了非常多的轮子,而且也在服务器部署方面和数据获取方面广泛使用 gevent 来提高并发获取数据的能力.现在开始我将结合实际使用与测试慢慢完善自己对 gevent 更全面的使用和扫盲. ...
- ssm框架整合配置,用maven配置依赖jar包
1.创建maven project 首先在pom.xml中指定工程所依赖的jar包 <project xmlns="http://maven.apache.org/POM/4.0.0& ...
- git(命令行常用炒作)
Git常用操作 https://backlog.com/git-tutorial/cn/intro/intro1_1.html Git详解(思维导图) https://blog.csdn.net/hu ...
- 二、Docker部署应用
一.有关Docker的安装请参考docker官网 Docker 提供了两个版本:社区版 (CE) 和企业版 (EE). Docker 社区版 (CE) 是开发人员和小型团队开始使用 Docker 并 ...