linux下练习 c++ 关联式容器multimap特性

/*
multimap特性
key可以重复
不支持下标访问
*/
#include<iostream>
#include<string>
#include "print.h"
#include<map>
using namespace std;
typedef pair<int,string>  pairmp;
typedef multimap<string,double> MS;

int main()
{
	MS m;
	m.insert(MS::value_type("t1",1000));
	m.insert(MS::value_type("t1",1300));
	m.insert(make_pair("t2",3000));
	m.insert(MS::value_type("t1",1800));
	m.insert(make_pair("t2",100000));
	m.insert(MS::value_type("t1",1600));
	print(m.begin(),m.end());
	MS::iterator ib=m.begin(),ie;
	MS m2;
	while(ib!=m.end())
	{
		string name=ib->first;//first:K,second:V
		ie=m.upper_bound(name);//同一个key的一个区别上界
		double sum=0.0;
		while(ib!=ie)
		{
			sum+=(ib++)->second;
		}
		m2.insert(make_pair(name,sum));//处理,并加入一个容量
	}
	print(m2.begin(),m2.end());
	return 0;
}

运行:

 

时间: 2025-02-01 16:57:52

linux下练习 c++ 关联式容器multimap特性的相关文章

linux下练习 c++ 关联式容器map特性

/* map.cpp map特性 不允许key重复 key/value对 key可以当下标访问value,key不存在则插入新的key/value对,以0初始化 */ #include<iostream> #include<string> #include "print.h" #include<map> using namespace std; typedef pair<int,string> pairmp; #include<ma

linux下练习 c++ 关联式容器共性测试,使用

/* 关联式容器共性:二叉查找树实现,自动根据关键字排序,自动平衡 set<K>,multiset<K>,map<K,V>,multimap<K,V> 查找:.find(key) 失败返回.end() 统计:.count(key) 删除:.erase(key) 插入:.insert(element) 区间:.lower_bund(key) //取得关键字为key的第一个元素位置 .upper_bound(key) //取得关键字为key的最后一个元素之后的位

linux下练习 c++ 类库中list的特性、关联式容器共性介绍

/* 库模版中 list 特性: 双向链表 增删:.push_front(element),.pop_front(),.remove(element) 不支持下标访问 除去重复:.unique() 相邻的重复元素只保留一个 排序:.sort(),默认用'<'号比较,自定义类型要重载运算符 倒置:.reverse() 转移:.aplice(pos,list2),.aplice(pos,list2,pos2), .aplice(pos,list2,pos2_begin,pos2_end) 归并:.m

linux下Sersync实现触发式文件同步

序言:如果我们后端有多台网站服务器或者文件服务器,而且没有好的文件同步机制,那么当我们升级程序或者更新文件的时候,就需要每台服务器或者目录都要更新,这样很容易出问题,并很容易导致两边的文件不一致,从而出现很多莫民其妙的问题.因此我们需要使用好的文件同步方式来实现几个后端服务器文件的同步,目前广泛采用的方案是使用rsync+inotify的方式来实现文件的触发更新.原理是采用inotify来对文件进行监控,当监控到文件有文件发生改变的时候,就会调用rsync实现触发式实时同步!本文就来详细介绍金山

linux下练习 c++ 序列容器的使用

//sequence.cpp   // sequence.cpp /* 序列式容器:vector,deque,list 插入:.insert(position,n,element), .insert(position,pos_begin,pos_end) 赋值:.assign(n,element), .assign(pos_begin,pos_end) 调整:.resize(n,element=value) 首尾:.front(),.back() 增删:.push_back(element),

Linux下c++编译器Code::Blocks安装

最近想写写C .C++方面的程序,所以想找一个Linux下的编辑器来用用, 找了很多也试了不少,最后锁定了CodeBlocks.以下是关于他的介绍和一些安装 过程.适用所有的Linux吧.(有时就只是需要一个安装的思路,其它的都差不 多一样的) (摘抄)Code::Blocks,有时也简单打成 "CodeBlocks",是一款全新的C++集成设置环境软件(IDE). 作为一款C++的IDE,Code::Blocks至少有以下几点非常吸引我. 开源--开源不仅仅意味着免费,但就算是仅仅是

如何在linux下检测内存泄漏

1.开发背景 在 windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下运行程序,而后调试器将在退出程序时,打印出程序运行过程中在堆上分配而没有释放的内存信息,其中包括代码文件名.行号以及内存大小.该功能是 MFC Framework 提供的内置机制,封装在其类结构体系内部. 在 linux 或者 unix 下,我们的 C++ 程序缺乏相应的手段来检测内存信息,而只能使用 top 指令观察进程的动态内存总额.而且程序退出时,我们无法获知任何内存泄漏信息.为了更好的辅助在 linu

Linux下套接字详解(三)----几种套接字I/O模型

背景知识 阻塞和非阻塞 对于一个套接字的 I/O通信,它会涉及到两个系统对象,一个是调用这个IO的进程或者线程,另一个就是系统内核.比如当一个读操作发生时,它会经历两个阶段: ①等待数据准备 (Waiting for the data to be ready) ②将数据从内核拷贝到进程中 (Copying the data from the kernel to the process) 阻塞,在linux中,默认情况下所有的socket都是blocking,当用户进程调用了recvfrom/re

Linux下多进程/多线程编程

linux下多进程.多线程编程 linux下进程   (一) 理解Linux下进程的结构  Linux下一个进程在内存里有三部份的数据,就是"数据段","堆栈段"和"代码段",其实学过汇编语言的人一定知道,一般的CPU象I386,都有上述三种段寄存器,以方便操作系统的运行."代码段",顾名思义,就是存放了程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段.  堆栈段存放的就是子程序的返回地址