by attack666 
 
 

set与map

 

map

内部实现是一棵红黑树

  • 定义

key和value分别对应着两种类型

map<key, value> mp;

  • 内部函数

直观的理解就是一种加强的数组。

 
  1. begin()--返回指向第一个元素的迭代器
  2. end()--返回指向最后一个元素的迭代器
  3. find()--返回一个指向被查找到元素的迭代器
  4. size()--集合中元素的数目
  5. clear()--清除所有元素
  6. count()--返回某个值元素的个数
  7. empty()--如果集合为空,返回true
  8. lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器
  9. 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
 
  1. #include<tr1/unordered_map>
  • cc_hash_table

MingW/4.8.1/include/c++/ext/pb_ds

 

set

link

 
  1. begin();//返回的是第一个元素的迭代器
  2. end();
  3. insert(x);//pair<set<int>::iterator, bool>> second = 0说明已经有该元素/否则成功插入
  4. size();
  5. find(x);//若能找到返回迭代器,否则返回end()
  6. count(x);//出现次数,因为set的性质,所以只有0/1
  7. lower_bound(x);//>=x的iterator
  8. upper_bound(x);//>x的iterator
  9. erase(x);//删除x。

关于遍历时使用erase函数的问题

#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);
}
 
by刘学长
 

STL之set和map的更多相关文章

  1. STL模板中的map的使用与例题

    最近的计分赛,记得自己的都只是过了两题.遇到了两次map,自己在寒假看了一点的map,只知道在字符串匹配的时候可以用的到.但是自己对map的使用还是不够熟练使用,这回在第一次和第二次的计分赛中都遇到可 ...

  2. 带你深入理解STL之Set和Map

    在上一篇博客带你深入理解STL之RBTree中,讲到了STL中关于红黑树的实现,理解起来比较复杂,正所谓前人种树,后人乘凉,RBTree把树都种好了,接下来就该set和map这类关联式容器来" ...

  3. 《STL系列》之map原理及实现

    上一篇文章<STL系列>之vector原理及实现,介绍了vector的原理及实现,这篇文章介绍map的原理及实现.STL实现源码下载.STL中map的实现是基于RBTree的,我在实现的时 ...

  4. STL源码中map和set中key值不能修改的实现

    前言 最近正好刚刚看完,<stl源码剖析>这本书的map和set的源码部分.但是看完之后又突然发现,之前怎么没有注意到map和set容器中key不能修改是怎么实现的.故,特此整理如下. s ...

  5. STL的pair学习, map学习

    http://blog.csdn.net/calvin_zcx/article/details/6072286 http://www.linuxidc.com/Linux/2014-10/107621 ...

  6. STL中set和map

    set 可以认为是数学上的集合,集合中的元素不允许有重复.set特有的操作是高效的插入.删除和执行基本查找. set的插入方法是 insert,由于集合元素的唯一性,insert操作不一定会成功,in ...

  7. STL中stack/queue/map以及Boost unordered_map 的使用方法

    一.stackstack 模板类的定义在<stack>头文件中.stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型 ...

  8. 标准模板库(STL)学习指南之map映射

    转载自CSDN博客:http://blog.csdn.net/bat603/article/details/1456141 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关 ...

  9. 关于C++ STL标准库中map 的多元素应用

    map的特性是,所有的元素会根据键值自动排序.map的所有元素都是pair,同时拥有实值(value)和键值(key).pair的第一个元素被视为键值,第二个被视为实质piar 的定义 templat ...

  10. C/C++知识要点2——STL中Vector、Map、Set容器的实现原理

    1.Vector是顺序容器.是一个动态数组.支持随机存取.插入.删除.查找等操作,在内存中是一块连续的空间.在原有空间不够情况下自己主动分配空间.添加为原来的两倍.vector随机存取效率高,可是在v ...

随机推荐

  1. git reset的用法

    git reset三个选项 --mix,--hard,--soft 数据 针对每个选项都是操作这个文件. [root@centos demo]# git init Initialized empty ...

  2. python3 操作页面上各种元素的方法

    (1)       控制浏览器 ①控制浏览器窗口大小set_window_size(宽,高) 打开浏览器全屏maximize_window() ②控制浏览器后退back().前进forward() ③ ...

  3. setState的参数接收函数

  4. [转帖]Oracle 裁员史:技术人死于重组,卒于云计算

    Oracle 裁员史:技术人死于重组,卒于云计算 https://www.infoq.cn/article/tm-mcdHCPCI4eEwr6dbY 大厂裁员 我妈妈也总担心我没工作了 怎么还房贷 田 ...

  5. [转帖]BRD、MRD 和 PRD

    来源: https://www.zhihu.com/question/19655491 BRD 商业需求文档 Business Requirement Document MRD 市场需求文档 Mark ...

  6. 将Vue移动端项目打包成手机app---HBuilder

    将移动端页面打包成app 1.使用 HBuilder 直接编译打包 点击左上角 文件>打开目录>选择目录  选择用Webpack打包好的dist文件目录 由于我添加到项目了,所以会显示该项 ...

  7. CSS硬件加速的好与坏

    本文翻译自Ariya Hidayat的Hardware Accelerated CSS: The Nice vs The Naughty.感谢Kyle He帮助校对. 每个人都痴迷于60桢每秒的顺滑动 ...

  8. Python 版百度站长平台链接主动推送脚本

    如果自己的网站需要被百度收录,可以在搜索结果中找到,就需要将网站的链接提交给百度.依靠百度的爬虫可能无法检索到网站所有的内容,因此可以主动将链接提交给百度. 在百度的站长平台上介绍了链接提交方法,目前 ...

  9. oldriver

    功能: 1:数据详情:统计商家所关联邮箱的商家店铺的当天或者最近一周,最近一个月的订单情况,sku,order,value,回评率数据在具体哪个国家的销售情况. 增强版提供更丰富的数据详情和自定义功能 ...

  10. python optparser模块

    python的内置模块中对于命令行的解析模块共两个getopt 和 optparse .不过getopt过于简单,往往不能满足需求.此时可以使用optparse模块.这个模块相对于getopt更新,功 ...