我有一个映射,其值为 std::pair。
编译器在尝试设置迭代器时报错如下,但我不明白为什么:
src/DBConnector.cpp: In member function ‘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: error: no match for ‘operator=’ in ‘l_oIterEnd = p_mapValues.std::map<_Key, _Tp, _Compare, _Alloc>::end 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> > > > >’ /usr/include/c++/4.4/bits/stl_map.h:251: note: candidates are: 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();
...
}
这里有什么问题? map 可以包含 std::pairs 吗? (此外, map 可以包含持有不同类型的键吗?)
最佳答案
你没有命名类型 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
本身被称为“映射类型”。这很重要,因为许多操作都在 value 类型上进行,因此您需要访问 second
它的一部分以获得映射值。
关于c++ - 无法将迭代器设置为 std::map 的 std::pair,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9250889/