C++ 多重集的使用
C++ 多重集的使用
多重集当中的数据映射关系将不是前面的一对一的关系,而是一对多,也就是可以在容器当中插入具有相同key的实例。关于组织方式,LZ进行了下面的大胆的预测。
第一、底层的数据组织方式如果是红黑树,那么就会将具有相同key的数据连续存放,也就是在红黑树的中序遍历中他们是挨着的。
第二、如果是使用hash函数,我猜测是使用了另外一种容器,将他们放到了一个链表当中,因为他们简直相同,无需对key进行排序,这里唯一有价值的是时间信息,因此使用链表足矣。
这里的多重集包括了multimap,multiset,unordered_multimap,unordered_multiset
具体的一些用法总结如下。
1、insert
insert操作和前面的map,set没有多大区别,只是这里允许插入相同的键值
2、delete
multimap<string,string> students;
multimap.insert(make_pair("xiaoming","PKU"));
multimap.insert(make_pair("xiaoming","THU"));
multimap<string,string>::size_type cnt=students.erase("xiaoming");
上述代码返回删除的相同键值的元素的个数
3、查找
由于存在重复,因此需要应对重复的情形。同样以multimap为例
3.1传统的方法
typedef multimap<string,string>::size_type stype;
stype num = m.count("key");
multimap<string,string>::iterator iter;
iter=m.find("key");
for(int i=;i<num;i++){
cout<<iter->second<<endl;
iter++;
}
3.2使用upper bound和lower bound
typedef multimap<string,string>::iterator iteratortype;
iteratortype iterup=m.upper_bound("key");
iteratortype iterlow=m.lower_bound("key");
for(;iterup!=iterlow;iterup++){
cout<<iterup->second<<endl;
}
3.3使用equal_range(key)
typedef multimap<string,string>::iterator iteratortype;
pair<iteratortype,iteratortype> p=m.equal_range("key");
while(p.first != p.second){
cout<<p.first->second<<endl;
p.first++;
}
C++ 多重集的使用的更多相关文章
- Vijos_1792_摆花_(动态规划,多重集组合数)
描述 https://vijos.org/p/1792 共n种花,第i种花有a[i]个,要摆m个,同一种花连续且花按照序号从小到大排,问共有多少种摆花方案. 描述 小明的花店新开张,为了吸引顾客, ...
- POJ_3046_Ant_Counting_(动态规划,多重集组合数)
描述 http://poj.org/problem?id=3046 n种蚂蚁,第i种有ai个,不同种类的蚂蚁可以相互区分,但同一种类的蚂蚁不能相互区分,从这些蚂蚁中取出s,s+1,s+2,...,b- ...
- Problem I: STL——多重集的插入和删除
Problem I: STL--多重集的插入和删除 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1729 Solved: 1258[Submit][ ...
- Codeforces Round #523 (Div. 2) D. TV Shows 模拟(多重集 先把所有区间加入多重集合)+贪心+二分
题意:给出n个电视节目的起始和结束时间 并且租一台电视需要x +y*(b-a) [a,b]为时段 问完整看完电视节目的最小花费是多少 思路:贪心的思想 情况1 如果新租一台电视的花费<=在空 ...
- 乘法原理,加法原理,多重集的排列数(多个系列操作穿插的排列数) 进阶指南 洛谷p4778
https://www.luogu.org/problemnew/solution/P4778 非常好的题目,囊括了乘法加法原理和多重集合排列,虽然最后使用一个结论解出来的.. 给定一个n的排列,用最 ...
- hdu6397 Character Encoding 母函数解约束条件下多重集
http://acm.hdu.edu.cn/showproblem.php?pid=6397 原问题的本质是问m个元素的多重集S,每一种类型的对象至多出现n-1次的S的k组合的个数是多少? 等价于 x ...
- poj 3046 Ant Counting(多重集组合数)
Ant Counting Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total ...
- Codeforces Round #523 (Div. 2)D(二分,多重集)
#include<bits/stdc++.h>using namespace std;const long long N=1e5+5;const long long MOD=1e9+7;l ...
- Codeforces Round #527 (Div. 3)C(多重集,STRING)
#include<bits/stdc++.h>using namespace std;const int maxn=1e6+7;pair<string,int>p[maxn]; ...
随机推荐
- Dynamics Webservice Call with Credential
Dynamics Webservice call with credential /// <summary> ///WebServiceHelper 的摘要说明 /// </summ ...
- Ibatis 测试出SQL
String sql = Brg.Global.Map.BaseBatis.GetRuntimeSql("select_T_JewelleryProductType", _Mode ...
- SQLServer日志无法收缩原因分析及解决
SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确保了事 ...
- Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数
1. 集合 1.1 特性 集合是一个无序的,不重复的数据组合,主要作用如下: 去重,把一个列表变成集合实现自动去重. set可以看成数学意义上的无序和无重复元素的集合,因此,两 ...
- windows下安装多个tomcat服务
摘要 公司服务器已经部署2个tomcat,分别属于不同的系统.今天新开发的系统也要上线测试,故新增一个tomcat服务器. 1.官网下载tomcat 7 解压缩版本.我使用的是 apache-tomc ...
- Groovy basic
1. print println "Hello Groovy!" you can use java in Groovy System.out.println("Hello ...
- step2-------使用myeclipse创建maven java web项目
1.文章内容概述: 在对项目需求进行分析之后,决定使用maven对我的java web项目进行管理,这篇文章记录了使用myeclipse创建maven java web项目的过程. 2.开发环境: j ...
- Spring MVC 文件上传
1.form的enctype=”multipart/form-data” 这个是上传文件必须的 2.applicationContext.xml中 <bean id=”multipartReso ...
- PHP--目录处理
__file___ dirname(): dirname()与__file__的组合:dirname(__file__)
- Spring配置数据源的几种形式
Spring中提供了4种不同形式的数据源配置方式: 1.Spring自带的数据源(DriverMangerDataSource); 2.DBCP数据源; 3.C3P0数据源; 4.JNDI数据源. 以 ...