SCO*_*SCO 2 c++ iterator map 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> ::'中的'operator ='以_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>>>>'/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>>>>>]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>>>>]]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();
...
}
Run Code Online (Sandbox Code Playgroud)
这里有什么问题 ?地图可以包含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; // !!
// ...
}
Run Code Online (Sandbox Code Playgroud)
请注意,值类型的map<A, B>其实是pair<A, B>,虽然B本身被称为“映射类型”。这很重要,因为许多操作都针对值类型,因此您需要访问second它的一部分以获取映射值。
| 归档时间: |
|
| 查看次数: |
1975 次 |
| 最近记录: |