multimap应用
来源:互联网 发布:mac spark 环境搭建 编辑:程序博客网 时间:2024/06/03 20:12
**从“map测试输入文档.txt”读入 key-value 数值,对其进行统计,算出 total(总数),count(个数),min(最小值),max(最大值),并写入文件// MapApplication.cpp : 定义控制台应用程序的入口点。//VS 2005#include "stdafx.h"#include <cassert>#include <iostream>#include <typeinfo>#include <map>using namespace std;/*因为 string 没有提供 < 操作,这里对 less 类模板进行特化*/template<>struct less<string> : public binary_function<string,string,bool>{bool operator()(const string& _Left, const string& _Right) const{string::size_type i = 0;while(i < _Left.length() && i < _Right.length()){if(_Left.at(i) != _Right.at(i)){return _Left.at(i) > _Right.at(i) ? true : false;}i++;}if(i < _Left.length())return true;if(i < _Right.length())return false;return false;}};int _tmain(int argc, _TCHAR* argv[]){FILE* pFile = NULL;fopen_s(&pFile,"map测试输入文档.txt","r");assert(pFile != NULL);char buf[BUFSIZ + 1]={0};/*把文档内容读入 strRead*///fread 函数不会给 buf 自动填充'\0'size_t readSize = fread(buf,sizeof(char),BUFSIZ,pFile);buf[readSize] = '\0';string strRead;while(readSize){strRead += buf;readSize = fread(buf,sizeof(char),BUFSIZ,pFile);buf[readSize] = '\0';}fclose(pFile);pFile = NULL;/*开始处理 strRead*/string::size_type st;string strName,strNumber;int nNumber;char szName[BUFSIZ + 1];multimap<string,int> mm;while(!strRead.empty()){/*strRead的形式是 "字母+数字+字母+数字..."这里需要把 字母和数字分开可以考虑 strtod(); strspn(); strpbrk()函数是否可用*///找出字母st = strRead.find_first_of("0123456789");if(st <= BUFSIZ){strRead.copy(szName,st);szName[st] = '\0';strName = szName;}strRead.erase(0,st);//找出数字string::size_type i =0;for(i = 0; i < BUFSIZ; i++){if(i >= strRead.length() || !isdigit(strRead.at(i)))break;}i++;if(i <= BUFSIZ){strRead.copy(szName,i);szName[i] = '\0';strNumber = szName;}strRead.erase(0,i);nNumber = atoi(strNumber.c_str());//存入multimapmm.insert(make_pair(strName,nNumber)); }//写文件fopen_s(&pFile,"map测试输出文档.txt","w+");assert(pFile != NULL);size_t sWrite = fwrite("name \t total \t count \t min \t max \n",sizeof(char),strlen("name \t total \t count \t min \t max \n"),pFile);typedef multimap<string,int>::iterator multimapItor;typedef multimap<string,int>::size_type sizeType;multimapItor Itor;pair<multimapItor,multimapItor> p;Itor = mm.begin();int total,min = 0,max = 0;sizeType count;while(Itor != mm.end()){total = 0;min = 0;max = 0;p = mm.equal_range(Itor->first);count = mm.count(Itor->first);multimapItor mI;for(mI = p.first; mI != p.second; mI++){if(min == 0 || max == 0){min = mI->second;max = mI->second;}total += mI->second;//找出最大最小值if(mI->second > max){max = mI->second;}if(mI->second < min){min = mI->second;}}char szWrite[BUFSIZ] = {0};int len = sprintf(szWrite,"% 10s% 5d% 5d% 5d% 5d\n",Itor->first.c_str(),total,count,min,max);szWrite[len] = '\0';fwrite(szWrite,sizeof(char),len,pFile);if(p.second == mm.end())break; Itor = mm.find(p.second->first);}fclose(pFile);system("pause");return 0;}
//map测试输入文档.txt
apple 100
pear 103
banana 200
Peach 150
apple 23
pear 54
banana 75
Peach 29
Peach 43
apple 6
pear 21
Peach 150
apple 64
pear 976
banana 2
Peach 124
Peach 543
apple 100
pear 103
banana 200
Peach 150
apple 23
pear 54
banana 75
Peach 29
Peach 43
apple 6
pear 21
Peach 150
apple 64
pear 976
banana 2
Peach 124
Peach 543
apple 100
pear 103
banana 200
Peach 150
apple 23
pear 54
banana 75
Peach 29
Peach 43
apple 6
pear 21
Peach 150
apple 64
pear 976
banana 222
Peach 401
Peacha 402
//map测试输出文档.txt
name total count min max
pear 3462 12 21 976
banana 1051 9 2 222
apple 579 12 6 100
Peacha 402 1 402 402
Peach 2851 17 29 543
0 0
- multimap应用
- multimap应用
- multimap和set的应用
- multimap
- multimap
- Multimap
- multimap
- multimap
- multimap
- multimap
- multimap
- multimap
- multimap
- multimap(一个键值对应多个值)的应用
- Word Amalgamation之 multimap的应用
- Map容器与multimap容器应用的小知识
- C++ 标准模板库STL multimap 使用方法与应用介绍
- 【STL】STL中红黑树的应用set、multiset、map、multimap
- [连载]C#程序设计(14)--- 泛型和容器
- 编程之美热身赛 题目1 : 传话游戏
- POJ2479 Java 动态规划
- POJ3104_Pie_二分
- 记忆力游戏(C#版)
- multimap应用
- ubuntu下的nginx+php+mysql配置
- 对C语言类型转换总结及求校验和的教训
- WindApi2 , WindOriginalApiLibrary 突然不兼容问题
- 如何学习编程
- bridge ip
- MVC模式在游戏开发的应用
- 关闭SSD(固态硬盘)节能功能 提搞SSD性能
- POJ2065_Testing the CATCHER_DP