Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何以向量向量作为其值在地图中迭代?_C++_Dictionary_Vector_Maps_C++98 - Fatal编程技术网

C++ 如何以向量向量作为其值在地图中迭代?

C++ 如何以向量向量作为其值在地图中迭代?,c++,dictionary,vector,maps,c++98,C++,Dictionary,Vector,Maps,C++98,我正在尝试编写一个函数,它获取一个“向量的向量”,并将它们存储在地图中。本质上,我想在一个以表名为键的映射中存储一系列SQL语句(值) 例如:-table1键将存储所有要输出到table1的sql查询-table2键将存储所有要输出到table2的sql查询 到目前为止,我已经在boost单元测试中编写了这篇文章,在这里我声明了存储查询的std::vector mapVector。填充后,我想将它们存储在std::map-mapquerys中 现在,我在存储这些数据方面没有问题,只是如何访问我的

我正在尝试编写一个函数,它获取一个“向量的向量”,并将它们存储在地图中。本质上,我想在一个以表名为键的映射中存储一系列SQL语句(值)

例如:-table1键将存储所有要输出到table1的sql查询-table2键将存储所有要输出到table2的sql查询

到目前为止,我已经在boost单元测试中编写了这篇文章,在这里我声明了存储查询的
std::vector mapVector
。填充后,我想将它们存储在
std::map-mapquerys

现在,我在存储这些数据方面没有问题,只是如何访问我的
mapQueries
map中的元素

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", "BIGINT", "INTEGER", "INTEGER", "INTEGER", "INTEGER", "INTEGER"};
    std::string insertColumns1Array[256] = {"ID", "RECORDTIME", "TYPE", "TIMESTAMP", "ENCODER1", "ENCODER2", "ENCODER3", "ENCODER4", "ENCODER5"};
    std::string insertValues1Array[256] = {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
    std::string insertColumns2Array[256] = {"ID", "RECORDTIME", "TYPE", "TIMESTAMP", "ENCODER1", "ENCODER2", "ENCODER3", "ENCODER4", "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++;
    }
BOOST\u AUTO\u TEST\u案例(mapTestVects){
std::string tableName=“ENCODER1”;
std::载体crt1;
std::载体crt2;
std::向量插入列1;
std::向量插入值1;
std::向量插入列2;
std::向量插入值2;
向量映射向量;
std::string crt1Array[256]={“ID”,“RECORDTIME”,“TYPE”,“TIMESTAMP”,“ENCODER1”,“ENCODER2”,“ENCODER3”,“ENCODER4”,“ENCODER5”};
字符串crt2Array[256]={“整数”、“整型”、“整型”、“整型”、“整型”、“整型”、“整型”、“整型”、“整型”、“整型”};
std::string insertColumns1Array[256]={“ID”,“RECORDTIME”,“TYPE”,“TIMESTAMP”,“ENCODER1”,“ENCODER2”,“ENCODER3”,“ENCODER4”,“ENCODER5”};
string insertValues1Array[256]={“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”};
std::string insertColumns2Array[256]={“ID”,“RECORDTIME”,“TYPE”,“TIMESTAMP”,“ENCODER1”,“ENCODER2”,“ENCODER3”,“ENCODER4”,“ENCODER5”};
std::string insertValues2Array[256]={“10”、“11”、“12”、“13”、“14”、“15”、“16”、“17”、“18”};
对于(int i=0;i<9;i++){
crt1.push_-back(crt1Array[i]);
crt2.push_-back(crt2数组[i]);
insertColumns1.push_back(insertColumns1Array[i]);
insertValues1.向后推_(insertValues1Array[i]);
insertColumns2.push_back(insertColumns2Array[i]);
insertValues2.向后推_(insertValues2Array[i]);
}
mapVector.push_back(插入列1);
mapVector.push_back(插入值1);
mapVector.push_back(插入列2);
mapVector.push_back(插入值2);
地图等等;
地图查询;
insert(std::pair(“table1”,mapVector));
std::map::iterator it=mapQueries.begin();
while(it!=mapQueries.end()){
std::cout first
  • mapQueries
    std::map
    ,而不是
    std::map
    ,所以使用
  • 而不是

    std::map<std::string, std::string>::iterator it = mapQueries.begin();
    
    std::map::iterator it=mapQueries.begin();
    
  • 您不能以这种方式打印矢量(除非您重载
    opeator)
    
  • mapQueries
    std::map
    ,而不是
    std::map
    ,所以使用
  • 而不是

    std::map<std::string, std::string>::iterator it = mapQueries.begin();
    
    std::map::iterator it=mapQueries.begin();
    

  • 您不能以这种方式打印矢量(除非您重载
    Operator,否则您不能使用其他类型的迭代器来循环
    mapQueries
    。您可能应该循环
    mapQueries
    ,获取键(type
    std::string
    )和值(type
    vector
    ),然后循环遍历向量向量,然后循环其中的每个向量。如下所示:

    typedef vector<string> vs_t;
    typedef vector<vs_t> vvs_t;
    typedef map<string, vvs_t> mapQueries_t;
    for (mapQueries_t::iterator i = mapQueries.begin(); i != mapQueries.end(); ++i) {
        string& key = i->first;
        for (vvs_t::iterator j = i->second.begin(); j != i->second.end(); ++j) {
            for (vs_t::iterator k = j->begin(); k != j->end(); ++k) {
                string& value = *k;
                // use key and value
            }
        }
    }
    
    typedef向量vs\u t;
    类型定义向量vvs_t;
    typedef地图查询;
    for(mapQueries_t::迭代器i=mapQueries.begin();i!=mapQueries.end();++i){
    string&key=i->first;
    对于(vvs_t::迭代器j=i->second.begin();j!=i->second.end();++j){
    对于(vs_t::迭代器k=j->begin();k!=j->end();++k){
    字符串和值=*k;
    //使用键和值
    }
    }
    }
    

    我正在使用引用来防止复制。

    您不能使用其他类型的迭代器来循环
    mapQueries
    。您可能应该循环
    mapQueries
    ,获取键(type
    std::string
    )和值(type
    vector
    ),然后循环遍历向量向量,然后循环其中的每个向量。如下所示:

    typedef vector<string> vs_t;
    typedef vector<vs_t> vvs_t;
    typedef map<string, vvs_t> mapQueries_t;
    for (mapQueries_t::iterator i = mapQueries.begin(); i != mapQueries.end(); ++i) {
        string& key = i->first;
        for (vvs_t::iterator j = i->second.begin(); j != i->second.end(); ++j) {
            for (vs_t::iterator k = j->begin(); k != j->end(); ++k) {
                string& value = *k;
                // use key and value
            }
        }
    }
    
    typedef向量vs\u t;
    类型定义向量vvs_t;
    typedef地图查询;
    for(mapQueries_t::迭代器i=mapQueries.begin();i!=mapQueries.end();++i){
    string&key=i->first;
    对于(vvs_t::迭代器j=i->second.begin();j!=i->second.end();++j){
    对于(vs_t::迭代器k=j->begin();k!=j->end();++k){
    字符串和值=*k;
    //使用键和值
    }
    }
    }
    

    我正在使用引用来防止复制。

    这是否回答了您的问题?我想您已经更改了代码,现在
    std::map::iterator it=mapQueries.begin();
    是错误的。在任何情况下,使用
    auto
    来获得正确的类型
    auto it=mapQueries.begin()这回答了你的问题吗?我想你已经更改了你的代码,现在
    std::map::iterator it=mapQueries.begin();
    是错误的。无论如何,使用
    auto
    来获得正确的类型
    auto it=mapQueries.begin()
    严格地说,2是错误的。如果你只是为
    操作符提供必要的重载,你就可以
    做任何事情。第一部分你是正确的,我已经修复了,但是我认为自动关键字在C++98中不存在。idclev463035818,胡桃木,jabroni修复了所有问题,谢谢从中学习了很多。谢谢!严格地说ing 2是错误的。如果您只为
    操作符提供必要的重载,您可以
    做任何事情。您所说的第一部分是正确的,我已经修复了,但是我认为在C++98中不存在auto关键字。idclev463035818,胡桃木,jabroni修复了所有问题,谢谢从中学习了很多。谢谢!
    
    std::cout << it->first << " :: " << it->second <<std::endl;
    //                                  ^^^^^^^^^^ vector
    
    // A.
    for (std::vector<std::vector<std::string> >::iterator it1 = it->second.begin(); it1 != it->second.end(); ++it1)
        for (std::vector<std::string>::iterator it2 = it1->begin(); it2 != it1->end(); ++it2)
            std::cout << *it2 << " ";
    
    // B.
    for (size_t i = 0; i < it->second.size(); ++i)
        for (size_t j = 0; j < it->second[i].size(); ++j)
            std::cout << it->second[i][j] << " ";
    
    typedef vector<string> vs_t;
    typedef vector<vs_t> vvs_t;
    typedef map<string, vvs_t> mapQueries_t;
    for (mapQueries_t::iterator i = mapQueries.begin(); i != mapQueries.end(); ++i) {
        string& key = i->first;
        for (vvs_t::iterator j = i->second.begin(); j != i->second.end(); ++j) {
            for (vs_t::iterator k = j->begin(); k != j->end(); ++k) {
                string& value = *k;
                // use key and value
            }
        }
    }