无法将迭代器设置为std::对的std::映射
Unable to setup an iterator to a std::map of std::pair
我有一个映射,它的值是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<_键,_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::映射<_键、_Tp、_Compare、_Alloc>&std::映射<_键,_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;
- 在C++中对T*类型执行std::move的意外行为
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 如何减少对 std::type_index 的实施?
- PyBind11:返回对 std::vector of std::unique_ptr 的常量引用
- 对 std::vector 的这种解读是如何工作的?
- 对于多个字符(如 ETX/STX 对),是否有类似于 std::quote 的东西
- 如何实现对参数顺序不可知的std::same_as的广义形式(即对于两个以上的类型参数)
- 将从std::映射中获取的std::pair引用传递给接受std::对引用的函数
- 类模板的参数太少 "std::pair":在函数中将 std 对作为参数传递
- 如何声明对STD算法的引用
- 可以在编译时或运行时检查STD ::对齐的限制
- 寻求对std::forward的澄清
- 如何对多维 std::vector 的所有元素求和?
- 关于C++std::对的奇怪编译错误
- 比较std::对的2个std::列表
- std::对的数组的聚合初始化
- 智能指针std::对的元素
- 可以将std::对的std::矢量转换为字节数组
- 无法将迭代器设置为std::对的std::映射
- std::对的分段构造,带有类型擦除