我正在尝试编写一个函数,该函数采用“向量的向量”并将其存储在地图中。本质上,我想在一个以表名为键的映射中存储一系列SQL语句(值)。
因此,例如:-table1键将存储所有要输出到table1的sql查询-table2键将存储所有要输出到table2的sql查询
到目前为止,我已经在Boost单元测试中编写了此代码,在其中声明了std::vector<std::vector<std::string> > mapVector
来存储我的查询。填充完毕后,我要将它们存储在std::map<std::string,std::vector<std::vector<std::string> > > mapQueries
中。
现在,我存储这些数据没有问题,这只是如何访问mapQueries
映射中的元素的问题。
BOOST_AUTO_TEST_CASE(mapTestVects){
std::string tableName = "ENCODER1";
std::vector<std::string> crt1;
std::vector<std::string> crt2;
std::vector<std::string> insertColumns1;
std::vector<std::string> insertvalues1;
std::vector<std::string> insertColumns2;
std::vector<std::string> insertvalues2;
std::vector<std::vector<std::string> > mapVector;
std::string crt1Array[256] = {"ID","RECORDTIME","TYPE","TIMESTAMP","ENCODER1","ENCODER2","ENCODER3","ENCODER4","ENCODER5"};
std::string crt2Array[256] = {"INTEGER","BIGINT","INTEGER","INTEGER"};
std::string insertColumns1Array[256] = {"ID","ENCODER5"};
std::string insertvalues1Array[256] = {"1","2","3","4","5","6","7","8","9"};
std::string insertColumns2Array[256] = {"ID","ENCODER5"};
std::string insertvalues2Array[256] = {"10","11","12","13","14","15","16","17","18"};
for(int i = 0; i < 9; i++){
crt1.push_back(crt1Array[i]);
crt2.push_back(crt2Array[i]);
insertColumns1.push_back(insertColumns1Array[i]);
insertvalues1.push_back(insertvalues1Array[i]);
insertColumns2.push_back(insertColumns2Array[i]);
insertvalues2.push_back(insertvalues2Array[i]);
}
mapVector.push_back(insertColumns1);
mapVector.push_back(insertvalues1);
mapVector.push_back(insertColumns2);
mapVector.push_back(insertvalues2);
std::map<std::string,std::vector<std::string> > blah;
std::map<std::string,std::vector<std::vector<std::string> > > mapQueries;
mapQueries.insert(std::pair<std::string,std::vector<std::vector<std::string> > >("table1",mapVector) );
std::map<std::string,std::string>::iterator it = mapQueries.begin();
while(it != mapQueries.end()){
std::cout << it->first << " :: " << it->second <<std::endl;
it++;
}
我尝试使用std::map<std::string,std::string>::iterator
遍历它,但是出现以下编译器错误:
error: conversion from ‘std::map<std::__cxx11::basic_string<char>,std::vector<std::vector<std::__cxx11::basic_string<char> > > >::iterator {aka std::_Rb_tree_iterator<std::pair<const std::__cxx11::basic_string<char>,std::vector<std::vector<std::__cxx11::basic_string<char> > > > >}’ to non-scalar type ‘std::map<std::__cxx11::basic_string<char>,std::__cxx11::basic_string<char> >::iterator {aka std::_Rb_tree_iterator<std::pair<const std::__cxx11::basic_string<char>,std::__cxx11::basic_string<char> > >}’ requested
std::map<std::string,std::string>::iterator it = mapQueries.begin();
error: no match for ‘operator!=’ (operand types are ‘std::map<std::__cxx11::basic_string<char>,std::__cxx11::basic_string<char> > >}’ and ‘std::map<std::__cxx11::basic_string<char>,std::vector<std::vector<std::__cxx11::basic_string<char> > > > >}’)
while(it != mapQueries.end()){
之所以将查询存储为向量,是因为我正在使用sqlite3,并且需要跟踪类型,值和表数据才能绑定和执行查询。我也在使用C ++ 98(必需)。