gpt4 book ai didi

c++ - 使用双迭代器引用 map 中的列表

转载 作者:行者123 更新时间:2023-11-30 03:26:09 25 4
gpt4 key购买 nike

我尝试使用像 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->second 应该代表 map 中的列表。如果我将列表分配给列表对象,它就可以正常工作。为什么当我使用“it->second.begin()”时它不起作用?感谢您的回答。

最佳答案

itconst_iterator . it->second因此是const , 和 (it->second).begin()也是一个const_iterator .所以newnewIterator需要是 std::list<string>::const_iterator .或者只使用 auto newnewIterator如果您的编译器足够新以支持它。

关于c++ - 使用双迭代器引用 map 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48514667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com