用STL中的map和multimap解决文件匹配问题

本文通过实例代码介绍了如何使用STL中的map和multimap解决文件中的数据匹配问题,包括处理唯一键值和重复键值的场景,以及在大数据量处理中的应用。
摘要由CSDN通过智能技术生成

某网友提问:

0000172009010199999999001         他们对应的结构体是id[7];date[9],date[9];item[4]

0000202009010299999999001         这是一个纯文本文件,名字叫info(d:/info)

0000222009010399999999003

0000232009010499999999002

0000242009010599999999005

0000302009010699999999001

 

说明:A参数是一个6位的字符串,比如说是000017;由于info文件特别大,查找A是否与info中的id匹配时,要用二分法进行查找(info中已经按id排好序了),要用c++实现下面的函数,请高手帮忙!!!!!!

int  getValue( char A )

{

         if(A与info文件中id匹配,并且id对应的item是“001”的话){return 1;}

         if(A与info文件中id匹配,并且id对应的item是“002”的话){return 2;}

}

以前还碰到一个类似的问题,是在Window Mobile上的。

这个问题的解决办法有很多,用二分法自然是其中一个。但在这里,我想用STL中的map或者multimap来解决问题。

 

1) key单一的情况,用map

#include <iostream>

#include <fstream>

#include <map>

#include <string>

using namespace std;

 

// 假定info.txt的内容是:

// 0000172009010199999999001

// 0000202009010299999999001

// 0000222009010399999999003

// 0000232009010499999999002

// 0000242009010599999999005

// 0000212009010599999999005   <<<  strkey为000021,目前排第6

// 0000302009010699999999001

//* 用map的方式解决

int main(void)

{

         ifstream fin("info.txt");

         if(!fin)

         {

                   cout << "can not open file..." << endl;

         }

 

         // 创建map,第一个string做为key,第二个string作为value

         map<string, string> linemap;

         string strkey;

         string strvalue;

         char linestring[26];

         while(fin)

         {

                   // 读取info.txt的一行,存入linestring

                   fin.getline(linestring, 26);

 

                   // 将lingstring赋值给strvalue

                   strvalue = linestring;

 

                   // 取前位作为key

                   strkey = strvalue.substr(0, 6);

 

                   // 将key,value对存入map中

                   linemap.insert(pair<string, string>(strkey, strvalue));

         }

         fin.close();

 

         // 设定要查找的字符串,将查得的结果存入stringresult中

         string s = "000017";

         string stringresult;

         // 声明iterator

         map<string, string>::iterator p;

        

         // 检查数据被插入后,是否根据strkey排序了 ->  结论:排序了

         // 即使info.txt中有重复的key,也只会有第一行含有key的文本,会被读入到map中

         for(p = linemap.begin(); p != linemap.end(); ++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值