构建多层字典:从Python到C++的翻译
我想在C++中模拟Python的字典。比如,我想创建一个像这样的东西:
{"The Dark Night Rises": {"year": 2012, "StoryLine": "this is the story.....", "Genres": ["action","crime","Thriller"]}}
我正在使用STL中的map和列表来构建这种字典。但是我不太确定该如何使用迭代器。有人能给我一个构建上面字典的例子吗?我开始做了一些简单的字典,比如{"cast":["action","crime","Thriller"]}
。我对如何构建上面提到的多层字典感到困惑,特别是如何遍历它们。
#include<iostream>
#include<string>
#include<map>
#include<iterator>
#include<list>
using namespace std;
class MultiLevDict
{
private:
list<string> lis;
map<string,list<string> > MultiDict;
public:
void Setter();
void Display() const;
};
void MultiLevDict::Setter()
{
string field;
string cast;
int sizeCast;
cout<<"enter the field of the movie:";
cin>>field;
cout<<endl;
cout<<"how many cast are there in this movie?:";
cin>>sizeCast;
for (int i=0; i<sizeCast; i++)
{
cin>>cast;
lis.push_back(cast);
}
MultiDict[field]=lis;
}
void MultiLevDict::Display() const
{
list<string>::iterator lisIt;
}
2 个回答
0
void MultiLevDict::Display() const
{
for (auto x : MultiDict)
for (auto y : x.second)
cout << x.first << ": " << y << endl;
}
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
2
遍历一个容器就像从开始到结束一样简单。你可以通过在容器类型后面加上 ::iterator 或 ::const_iterator 来获取迭代器的类型。
下面是一个完整的例子。我尽量保持和你的代码一致。注意关于 C++11 新语法的注释。
#include<iostream>
#include<string>
#include<map>
#include<iterator>
#include<list>
using namespace std;
class MultiLevDict
{
private:
list<string> lis;
map<string,list<string> > MultiDict;
public:
void Setter();
void Display() const;
};
void MultiLevDict::Setter()
{
string field;
string cast;
field="Abcd ";
lis.push_back("Tom");
lis.push_back("Eve");
MultiDict[field]=lis;
// This works in C++11 :
MultiDict["Efgh "]={"Joe","Lisa"};
}
void MultiLevDict::Display() const
{
for(map<string,list<string> >::const_iterator it=MultiDict.begin();
it!=MultiDict.end();++it){
std::cout << "key: was: "<<it->first<<std::endl;
for (list<string>::const_iterator it2=it->second.begin();
it2!=it->second.end();++it2){
std::cout << " "<<it->first<< " contains " <<*it2<<std::endl;
}
}
}
int main() {
MultiLevDict myd;
myd.Setter();
myd.Display();
}
结果是
key: was: Abcd
Abcd contains Tom
Abcd contains Eve
key: was: Efgh
Efgh contains Joe
Efgh contains Lisa