c++ - 无法将迭代器设置为 std::map 的 std::pair

标签 c++ map iterator std-pair

我有一个映射,其值为 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/

相关文章:

c++ - 动态分配的对象生产者

c++ - OpenGL/GLFW : glfwOpenWindow hanging (barebones application)

java - 覆盖 @autowired/@Inject Map<String,Object> 的键字符串?

arrays - 将元素保存在Map/Array/Collection中……Grails

python - 内置容器的迭代器

c++ - 覆盖新的和成员访问运算符以使用自定义堆

c++ - OS X 开发和 Dylibs

printing - OpenLayers 打印 map

java - 如何使用 arrayList 在 Iterator 中实现 next()

java - 我正在尝试实现我自己的 HashSet,但我不知道 iterator() 方法应该返回什么?