#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);
}