サイズのvector
を印刷しようとしています。簡単に聞こえますが、ベクトルはmap
です。私はこのようなサイズを表示しようとしています
map<string, vector<map<vector<string> , vector<string> > > >::iterator it;
イテレータを通したベクトルの印刷サイズ
: 現在、私はこのように見ているマップ上のイテレータを持って
EDIT:
イテレータはこのようにintialisedされています。 it = csvMap.find(commandList.at(lineCount));
cout<<"Size of vector in Map after modifying: " << it->second.size() <<"\n"<<endl;
これは機能しません。プログラムがクラッシュします。 一時ベクトルを作成し、値it->second;
を入力する方法があると思いますが、サイズを取得するにはスペースを無駄にしないでください。
もっと良い方法がありますか?
ありがとうございます!
EDIT2:削除古いコード
EDIT 3:新しいコード:
map<vector<string> , vector<string> > parameterMap;
parameterMap.insert(pair<vector<string> , vector<string> > (
part1_input, part2_output));
map<string, vector<map<vector<string> , vector<string> > > >::iterator it;
cout<<"\nSize of CSV Map before modifying: " << csvMap.size() <<endl;
//cout<<"Size of vector in CSV Map before modifying: " << it->second.size() <<"\n"<<endl;
if(csvMap.size() == 0)
{
/*
* csvMap is empty -> no need to search for something. Just insert the fist entries
*/
listedParameterMap.insert(listedParameterMap.end(), 1, parameterMap);
csvMap.insert(pair<string, vector<map<vector<string> ,
vector<string> > > > (commandList[lineCount],
listedParameterMap));
cout<<"CSV Map size: " << csvMap.size() <<endl;
}
else
{
/*
* Search if the Command is already available, if not,
* add it to the map with its corresponding list of maps (in/output values)
* find returns map::end if key is not found
*/
cout<<"Checking if: " << commandList.at(lineCount) << " is already in the list \n" << endl;
it = csvMap.find(commandList.at(lineCount));
if (it == csvMap.end())
{
/*
* it = csvMap.end() is true
* The command isn't found
*/
cout<< commandList.at(lineCount) << " command not available. Inserting it! \n" << endl;
listedParameterMap.insert(listedParameterMap.end(), 1, parameterMap);
csvMap.insert(pair<string, vector<map<vector<string> ,
vector<string> > > > (commandList[lineCount],
listedParameterMap));
}
else
{
/*
* it != csvMap.end()
* The command is found. Append the parameterMap to the vector in the map
*/
cout<< commandList.at(lineCount) << " is already in the list! Appending parameters on pos: "<< it->second.size()-1<< "\n" << endl;
it->second.push_back(parameterMap);
}
}
cout<<"\nSize of CSV Map after modifying: " << csvMap.size() <<endl;
cout<<"Size of vector in CSV Map after modifying: " << it->second.size() <<"\n"<<endl;
私は誰かがまだこれを読んでいる願っています...
これで、最初の処理ではit.second
が問題になっているようです。しかし、私は理由を知りません。 (また、上記のコードで)
コードスニペット:
if(csvMap.size() == 0)
{
/*
* csvMap is empty -> no need to search for something. Just insert the fist entries
*/
listedParameterMap.insert(listedParameterMap.end(), 1, parameterMap);
csvMap.insert(pair<string, vector<map<vector<string> ,
vector<string> > > > (commandList[lineCount],
listedParameterMap));
cout<<"CSV Map size: " << csvMap.size() <<endl;
cout<<"listedParameterMap: " << listedParameterMap.size() <<endl;
cout<< commandList.at(lineCount) << " is already in the list! Appending parameters on pos: "<< it->second.size()<< "\n" << endl;
}
これは動作しないようです。それにその洞窟がありますが。どんな考え? comanndListとlistedParameterMapは、表示されている範囲内です。
繰り返しループを送信してください。文脈が必要です。 –
'it-> second.size()'を使う前に、 'if(it!it = it!= csvMap.end())'をチェックしていますか? – Naveen
検索している 'lineCount'が存在しますか?検索後に 'map :: end'と等しいかどうかチェックしますか? –