c++builder使用Map保存数据库表的id和Map的常用操作

#include <iostream>
#include <map>
using namespace std;
typedef map<int,int> INTMAP;
typedef map<int,int>::iterator ITERATOR_MAP;
/****************************************************************************
/*    功能:通过Query控件执行查询的通用方法
/*    参数:AnsiString 表示查询sql语句
/*  返回值:BOOL  false:sql语句为空    true:成功
/***************************************************************************/
BOOL TForm1::ExecuteQueryCommonFunc(const AnsiString strSql){
        if(strSql==""){
                return false;
        }
        con1->Close();
        con1->Open();
        qry1->SQL->Clear();
        qry1->SQL->Add(strSql);
        qry1->Open();
        return true;
}
/****************************************************************************
/*    功能:根据sql语句得到记录,并保存记录的id
/*    参数:AnsiString表示指定的sql语句 INTMAP&表示存放id的Map数据结构
/*  返回值:void
/***************************************************************************/
void TForm1::SaveIdOfAfterQuery(AnsiString str,INTMAP& intMap){
        if(!ExecuteQueryCommonFunc(str)){
                return;
        }
        ITERATOR_MAP it;
        int count = qry1->RecordCount;
        TStringList* ps =  new TStringList;
        AnsiString strTmp;
        try{
              qry1->GetFieldNames(ps);
              str = ps->Text;
              int i = str.Pos("\r\n");
              strTmp = str.SubString(0,i-1);
        }
        __finally{
              delete ps; // destroy the list object
        }
        for(int i=1;i<=count;i++){
                intMap.insert(pair<int,int>(i,qry1->FieldByName(strTmp)->AsInteger));
                qry1->Next();
        }
}
/****************************************************************************
/*    功能:根据指定的索引找到前一个索引并返回
/*    参数:index表示指定的索引   int&表示返回的值  INTMAP&表示要操作的数据结构
/*  返回值:int    -1:表示无前索引      0表示成功
/***************************************************************************/
int TForm1::GetValueOfPriorByIndex(const int index,int &nValue,INTMAP& intMap){
        if(index<=1){
               return -1;//无前索引
        }
        nValue = intMap.find(index-1)->second;
        return 0;
}
/****************************************************************************
/*    功能:根据指定的索引找到后一个索引并返回
/*    参数:index表示指定的索引   int&表示返回的值  INTMAP&表示要操作的数据结构   
/*  返回值:int    -1:表示索引不合法   1:表示无后索引   0:表示成功
/***************************************************************************/
int TForm1::GetValueOfNextByIndex(const int index,int &nValue,INTMAP& intMap){
        if((index<1) && (index>static_cast<int>(intMap.size()))){
               return -1;//索引不合法
        }
        if(index==static_cast<int>(intMap.size())){
               return 1;
        }
        nValue = intMap.find(index+1)->second;
        return 0;
}
/****************************************************************************
/*    功能:根据指定的索引在map中删除一个元素
/*    参数:index表示指定的索引  INTMAP&表示要操作的数据结构
/*  返回值:int    -1:表示索引不合法    0:表示成功
/***************************************************************************/
int TForm1::DeleteValueByIndex(const int index,INTMAP& intMap){
        if((index<1) && (index>static_cast<int>(m1.size()))){
               return -1;//索引不合法
        }
        intMap.erase(intMap.find(index));
        return 0;
}
/****************************************************************************
/*    功能:两个map之间copy
/*    参数:1、INTMAP&表示源map    2、INTMAP&表示目地map
/*  返回值:void
/***************************************************************************/
void TForm1::MapCopy(INTMAP& intMap1,INTMAP& intMap2){
       intMap2.clear();
       ITERATOR_MAP it;
       int i;
       for(i=1,it=intMap1.begin();it!=intMap1.end();it++,i++){
                intMap2.insert(pair<int,int>(i,it->second));
       }
}
/****************************************************************************
/*    功能:重新排序map中的元素      用在当删除map中的一个元素时second不连续
/*    参数:无
/*  返回值:void
/***************************************************************************/
void TForm1::ReorderMap(){
        INTMAP m2;
        MapCopy(m1,m2);
        MapCopy(m2,m1);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值