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);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里提供一个简单的ROS Noetic使用gRPC转发/map话题的C++代码示例: ```c++ #include <iostream> #include <memory> #include <string> #include <grpcpp/grpcpp.h> #include <ros/ros.h> #include <nav_msgs/OccupancyGrid.h> #include "map_service.grpc.pb.h" // gRPC生成的头文件 using grpc::Server; using grpc::ServerBuilder; using grpc::ServerContext; using grpc::Status; using map_service::MapService; using map_service::MapRequest; using map_service::MapReply; using nav_msgs::OccupancyGrid; class MapServiceImpl final : public MapService::Service { public: MapServiceImpl() { // 初始化ROS节点 int argc = 0; char **argv = NULL; ros::init(argc, argv, "map_service_node"); ros::NodeHandle nh; map_sub = nh.subscribe("/map", 1, &MapServiceImpl::mapCallback, this); } Status GetMap(ServerContext* context, const MapRequest* request, MapReply* reply) override { ROS_INFO("Received a map request"); // 将ROS的地图话题转换为gRPC消息 reply->mutable_map()->set_header_frame_id(map.header.frame_id); reply->mutable_map()->set_info_resolution(map.info.resolution); reply->mutable_map()->set_info_width(map.info.width); reply->mutable_map()->set_info_height(map.info.height); reply->mutable_map()->set_data(map.data.begin(), map.data.end()); return Status::OK; } private: ros::Subscriber map_sub; OccupancyGrid map; void mapCallback(const OccupancyGrid::ConstPtr& msg) { ROS_INFO("Received a map message"); map = *msg; } }; void RunServer() { std::string server_address("0.0.0.0:50051"); MapServiceImpl service; ServerBuilder builder; builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); builder.RegisterService(&service); std::unique_ptr<Server> server(builder.BuildAndStart()); std::cout << "Server listening on " << server_address << std::endl; server->Wait(); } int main(int argc, char** argv) { RunServer(); return 0; } ``` 在这个例子中,我们定义了一个名为`MapServiceImpl`的gRPC服务实现类,它继承自自动生成的`MapService::Service`类。`MapServiceImpl`类中实现了一个`GetMap`方法,用于响应gRPC客户端的地图请求,并将ROS的地图话题转换为gRPC消息。同时,`MapServiceImpl`类中还定义了一个`mapCallback`方法,用于接收ROS地图话题消息,并将其存储到`map`变量中。 在`main`函数中,我们创建了一个`MapServiceImpl`实例,并用`ServerBuilder`类创建了一个gRPC服务器,并将该实例注册到服务器中。在服务器启动之后,它将等待客户端的请求,并在收到请求后调用`GetMap`方法响应请求。 此外,在`MapServiceImpl`构造函数中,我们初始化了ROS节点,并订阅了`/map`话题。当ROS节点接收到`/map`话题消息时,它将调用`mapCallback`方法,并将地图消息存储到`map`变量中。当gRPC客户端请求地图时,`GetMap`方法将使用这个`map`变量来生成gRPC消息并发送给客户端。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值