STL中的map
map 容器 提供 1 对 1 的关系
定义方式:
map<string,int>mp;
写在前面的是关键字。
数据插入:
1.使用 insert 插入 pair 数据
mp.insert(pair<string,int>("sb",));
2.用value_type进行插入
mp.insert(map<string,int>::value_type("sb",));
3.直接插入
mp["sb"] = ;
注意的是1,2两种插入方法,必须插入关键字不同的mp对,而方法三可以直接对关键字对应的信息覆盖。
常用函数:
mp.size();
sort(mp.begin,mp.end); //用迭代器排序
mp.clear(); //清空
mp.empty(); // 是否为空
查找函数:
pair mappair = mp.equal_range("sb");
if(mappair.first == mappair.second)
cout << "no find" << endl;
mappair.first 等同于lower_bound , second 等同于upper_bound。
数据删除函数:
int n = mp.erase("sb"); //删除成功返回 1 否则返回 0
讲的再多不如例题理解的透彻——hdu6015
题目大意是找出逃课值最大的方案
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int moder = 1e9 + ;
const int MAXN=; struct node
{
char s[];
int val; }; bool cmp(const node &a, const node &b)
{
return a.val > b.val;
} int main()
{
int t;
cin >> t;
map<string,int>mp;
while(t--)
{
int n;
cin >> n;
mp.clear(); //此处每次都一定要清空
node NODE[n];
for(int i=;i < n;i++)
cin >> NODE[i].s >> NODE[i].val; sort(NODE,NODE+n,cmp); ll sum = ;
for(int i=;i < n;i++)
{
if(mp[NODE[i].s] == ) continue;
else
{
mp[NODE[i].s]++; // 直接使用,不需要特殊的定义,map[关键字]对应的是逃课的次数
sum += NODE[i].val;
}
}
cout << sum << endl;
}
return ;
}
/*
STL中的map的更多相关文章
- STL 中的map 与 hash_map的理解
可以参考侯捷编著的<STL源码剖析> STL 中的map 与 hash_map的理解 1.STL的map底层是用红黑树存储的,查找时间复杂度是log(n)级别: 2.STL的hash_ma ...
- STL中的map和unordered_map
STL中的map和unordered_map map 头文件:#include 原理:std::map的内部实现了一颗红黑树,有对其键值进行排序的功能,所以map是一个有序的容器,map中的每一个元素 ...
- STL中关于map和set的四个问题?
STL map和set的使用虽不复杂,但也有一些不易理解的地方,如: 为何map和set的插入删除效率比用其他序列容器高? 或许有得人能回答出来大概原因,但要彻底明白,还需要了解STL的底层数据结构. ...
- C++ STL中的map用红黑树实现,搜索效率是O(lgN),为什么不像python一样用散列表从而获得常数级搜索效率呢?
C++ STL中的标准规定: map, 有序 unordered_map,无序,这个就是用散列表实现 谈谈hashmap和map的区别,我们知道hashmap是平均O(1),map是平均O(lnN)的 ...
- STL中的map、unordered_map、hash_map
转自https://blog.csdn.net/liumou111/article/details/49252645 在之前使用STL时,经常混淆的几个数据结构,特别是做Leetcode的题目时,对于 ...
- STL中的map和hash_map
以下全部copy于:http://blog.chinaunix.net/uid-26548237-id-3800125.html 在网上看到有关STL中hash_map的文章,以及一些其他关于STL ...
- stl中的map数据类型
1.1 STL map 1.1.1 背景 关联容器使用键(key)来存储访问读取元素,而顺序容器则通过元素在容器中的位置存储和访问元素. 常见的顺序容器有:vector.list.deque.stac ...
- STL中的map/multimap小结
(1)使用map/multimap之前必须包含头文件<map>:#include<map> 并且和所有的关联式容器一样,map/multimap通常以平衡二叉树来完成 (2)n ...
- stl中的map经验
如果想使用一个map临时变量装载参数map,不需要使用new创建一个对象. 声明一个变量,直接赋值就可以.map内部自己重载了=操作符,会自己分配内存.
随机推荐
- MTA---smtp(25,postfix,sendmail),Pop3(110,Devocot), MUA(foxmail) IMAP(server,client rsync)
利用telnet进行SMTP的验证 =========先计算BASE64编码的用户名密码,认证登录需要用到=========== [crazywill@localhost crazywill]$ pe ...
- Qt::QWidget 无默认标题栏边框的拖拽修改大小方式
开发环境:win10+vs2015+qt5.9.1 背景:开发过程中,一般很少会使用系统提供的标题栏和边框:往往都是自定义一个自己设计的方案.这时候在QWidget中需要加上flag:Qt::Fram ...
- Yarn之ResourceManager详细分析
一.概述 本文将介绍ResourceManager在Yarn中的功能作用,从更细的粒度分析RM内部组成的各个组件功能和他们相互的交互方式. 二.ResourceManager的交互协议与基本职 ...
- Maven– HelloWorld实例
Maven– HelloWorld实例 maven安装好后,可以通过HelloWorld项目来体验一下maven是如何构建项目的.Maven项目的核心是pom.xml(就像Ant的build.xml一 ...
- JS获取客户端系统当前时区
<script> function getClientTimezone(){ var oDate = new Date(); var nTimezone = -oDate.getTimez ...
- 找回 linux root密码的几种方法
第1种方法: 1.在系统进入单用户状态,直接用passwd root去更改 2.用安装光盘引导系统,进行linux rescue状态,将原来/分区挂接上来,作法如下: Java代码 #> c ...
- with语句与__enter__,__exit__
class Foo(object): def func(self): print("func") pass def __enter__(self): print("ent ...
- django-from
构建一个表单 这是一个非常简单的表单.实际应用中,一个表单可能包含几十上百个字段,其中大部分需要预填充,而且我们预料到用户将来回编辑-提交几次才能完成操作. 我们可能需要在表单提交之前,在浏览器端作一 ...
- 53. Maximum Subarray(动态规划 求最大子数组)
Find the contiguous subarray within an array (containing at least one number) which has the larges ...
- surface知识点
SurfaceView和TextureView 在学习直播的过程遇到一个问题:连麦场景下能够支持大小窗口切换(即小窗口变大,大窗口变小),大窗口是TextView(用于拉流显示),而小窗口是Surfa ...