簡體   English   中英

無法設置std :: pair的std :: map的迭代器

[英]Unable to setup an iterator to a std::map of std::pair

我有一個地圖,其值為std :: pair。

在嘗試設置迭代器時,編譯器會抱怨如下,但我無法理解為什么:

src / DBConnector.cpp:在成員函數'int DBConnector :: createGenericInsert(std :: string,std :: map <std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >>]中, std :: pair <int,std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >>>,std :: less <std :: basic_string <char,std :: char_traits <char >,std :: allocator <char >>>,std :: allocator <std :: pair <const std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >>,std :: pair <int,std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >>>>>>,std :: string&)':src / DBConnector.cpp:354:錯誤:否在'l_oIterEnd = p_mapValues.std :: map <_Key,_Tp,_Compare,_Alloc> :: end with _Key = std :: basic_string <char,std :: char_traits <char>,std :: allocator匹配'operator =' <char >>,_ Tp = std :: pair <int,std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >>>,_Compare = std :: less <std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >>>,_ Alloc = std :: allocator <std :: pair <cons t std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >>,std :: pair <int,std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >>>>>'/usr/include/c++/4.4/bits/stl_map.h:251:注意:候選人是:std :: map <_Key,_Tp,_Compare,_ Alloc>&std :: map < _Key,_Tp,_Compare,_Alloc> :: operator =(const std :: map <_Key,_Tp,_Compare,_Alloc>&)[with _Key = std :: basic_string <char,std :: char_traits <char>,std: :allocator <char >>,_ Tp = std :: pair <int,std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >>>,_Compare = std :: less <std: :basic_string <char,std :: char_traits <char>,std :: allocator <char >>>,_ Alloc = std :: allocator <std :: pair <const std :: basic_string <char,std :: char_traits <char> ,std :: allocator <char >>,std :: pair <int,std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >>>>>]

我的功能是這樣的:

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 :: pairs嗎? (此外,地圖可以包含持有不同類型的鍵嗎?)

您沒有正確命名類型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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM