使用双迭代器引用映射中的列表
Using double iterators to refer the list in the map
我尝试使用类似map的结构。当我尝试使用迭代器引用列表元素时,发生了错误。遵循代码。
map<string,list<string>> node;
void ContructGraph(vector<string>& wordList){
for(int i=0;i<wordList.size();i++){
list<string> *tem=new list<string>();
tem->push_back(wordList[i]);
for(int j=0;j<wordList.size();j++){
if(CheckDifference(wordList[i],wordList[j]))tem->push_back(wordList[j]);
}
node.insert(std::pair<string,list<string>>(wordList[i],*tem));
}
for(int i=0;i<wordList.size();i++){
visited.insert(std::pair<string,bool>(wordList[i],false));
nodeLength.insert(std::pair<string,int>(wordList[i],0));
}
for(map<string,list<string>>::const_iterator it=node.begin();it!=node.end();++it){
cout<<"node "<<it->first<<endl;
list<string> newList=it->second;// no error
std::list<string>::iterator newIterator =(newList).begin();//no error
std::list<string>::iterator newnewIterator=(it->second).begin();// with error
/*
for(std::list<string>:: const_iterator s_it=it->second.begin();s_it!=it->second.end()+s_it){
cout<<*s_it<<" ";
}
*/
cout<<endl;
}
错误消息是
conversion from 'std::__cxx11::list<std::__cxx11::basic_string<char> >::const_iterator {aka std::_List_const_iterator<std::__cxx11::basic_string<char> >}' to non-scalar type 'std::__cxx11::list<std::__cxx11::basic_string<char> >::iterator {aka std::_List_iterator<std::__cxx11::basic_string<char> >}' requested
据我了解,迭代器类似于指向元素的指针。 it->秒应表示映射中的列表。如果我将列表分配给列表对象,它就可以正常工作。为什么当我使用"it->second.begin(("时它不起作用?谢谢你的回答。
it
是一个const_iterator
。 因此it->second
是const
,(it->second).begin()
也是一个const_iterator
。 所以newnewIterator
需要std::list<string>::const_iterator
. 或者,如果您的编译器足够新,可以使用auto newnewIterator
来支持它。
这是因为您正在尝试迭代常数的 it->second。尝试替换
for(map<string,list<string>>::const_iterator it=node.begin();it!=node.end();++it){
跟
for(map<string,list<string>>::iterator it=node.begin();it!=node.end();++it){
这应该有效。
相关文章:
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 在子集化后将包含索引号的列表列表映射到标准索引序列
- C++:如何初始化包含具有给定键的指针列表的映射
- 具有不同参数列表的模板对象的模板静态映射
- 创建以向量/列表迭代器为键的映射
- 类型映射资源并将列表转换为矢量(并返回)
- C++ 有没有办法以相同的效率组合此列表和映射
- 在 stl 映射和列表 (c++) 上进行迭代的泛型循环
- 在 c++ 中生成字符串到 std::指针列表的映射
- 无法迭代结构"string"的哈希映射:[列表] C++
- 使用双迭代器引用映射中的列表
- C++11 在列表到映射(或其他容器)之间移动元素
- Qt:为模板(映射、列表、集合等)构建一个可变迭代器
- 是否有活动目录属性的完整列表,以及与LDAP的映射
- 将OpenCV中的像素颜色映射到预定的颜色列表中
- 如何在映射到列表对中插入值
- 循环访问列表映射
- 磁盘上由文件备份的键值对的列表/映射
- 从字符串列表的列表映射中获取字符串
- 带结构体的列表映射(包含列表)——不能通过映射访问结构体中的列表