无法将迭代器设置为std::对的std::映射

Unable to setup an iterator to a std::map of std::pair

本文关键字:std 对的 映射 设置 迭代器      更新时间:2023-10-16

我有一个映射,它的值是std::pair。

编译器在尝试设置迭代器时抱怨如下,但我不明白为什么:

src/DBConnector.cpp:In成员函数'intDBConnector::createGenericInsert(std::string,std::映射<std::basic_string<char,std::char_traits<char>,std::分配器<char>>,std::对<int,std::basic_string<烧焦std::char_traits<char>,std::分配器<char>>,std::less<std::basic_string<char,std::char_traits<char>,std::分配器<char>>,std::分配器<std::对<conststd::basic_string<char,std::char_traits<char>,std::分配器<char>>,std::对<int,std::basic_string<char,std::char_traits<char>,std::分配器<char>>,std::string&)':src/DBConnector.cpp:354:错误:中的"operator="不匹配'l_oInterEnd=p_mapValues.std::map&lt_键,_Tp,_Compare,_Alloc>::结束其中_Key=std::basic_string<char,std::char_traits<char>,std::分配器<char>>,_Tp=std::对<int,std::basic_string<烧焦std::char_traits<char>,std::分配器<char>>,_Compare=std::less<std::basic_string<char,std::char_traits<char>,std::分配器<char>>,_Alloc=std::分配器<std::对<conststd::basic_string<char,std::char_traits<char>,std::分配器<char>>,std::对<int,std::basic_string<char,std::char_traits<char>,std::分配器<字符>>>>'/usr/include/c++/4.4/bits/stl_map.h:251:注意:候选项为:std::映射&lt_键、_Tp、_Compare、_Alloc>&std::映射&lt_键,_Tp,_Compare,_Alloc>::运算符=(const std::map<_Key,_Tp,_Compare,_Alloc>&std::char_traits<char>,std::分配器<char>>,_Compare=std::less<std::basic_string<char,std::char_traits<char>,std::分配器<char>>,_Alloc=std::分配器<std::对<conststd::basic_string<char,std::char_traits<char>,std::分配器<char>>,std::对<int,std::basic_string<char,std::char_traits<char>,std::分配器<字符>>>>]

我的功能如下:

int DBConnector::createGenericInsert ( std::string p_sTable , std::map<std::string , std::pair<int,std::string> > p_mapValues , std::string & po_sInsert ) {
    std::map<std::string,std::pair<int,std::string> > l_oIter;
    std::map<std::string,std::pair<int,std::string> > l_oIterEnd;
    std::string s_Fieldnames;
    l_oIterEnd = p_mapValues.end(); // This is line 354
    l_oIter = p_mapValues.begin();
    s_Fieldnames += l_oIter.first();
    ...
}

这里有什么问题?映射可以包含std::对吗?(此外,映射是否可以包含持有不同类型的密钥?)

您没有正确命名类型iterator

请,,省事并使用typedef:

typedef std::map<std::string, std::pair<int, std::string>> map_type;
int DBConnector::createGenericInsert (std::string p_sTable, map_type p_mapValues,
                                      std::string & po_sInsert)
{
    std::string s_Fieldnames;
    map_type::iterator l_oIterEnd = p_mapValues.end();
    map_type::iterator l_oIter = p_mapValues.begin();
    s_Fieldnames += l_oIter->first; // !!
    // ...
}

请注意,map<A, B>值类型实际上是pair<A, B>,而B本身被称为"映射类型"。这一点很重要,因为许多操作都在类型上工作,因此您需要访问其中的second部分才能获得映射的值。

这些不是迭代器。

std::map<std::string,std::pair<int,std::string> > l_oIter;
 std::map<std::string,std::pair<int,std::string> > l_oIterEnd;

上述代码应更改为:

   std::map<std::string,std::pair<int,std::string> >::iterator l_oIter;
     std::map<std::string,std::pair<int,std::string> >::iterator l_oIterEnd;