C++ C++;映射插入文件数据
我试着在网站上搜索,但找不到解决办法 我的班级声明如下:C++ C++;映射插入文件数据,c++,class,c++11,map,C++,Class,C++11,Map,我试着在网站上搜索,但找不到解决办法 我的班级声明如下: class Movie { // data is private by default string title, studio; short releaseYear, rank[3]; // US, non-US, world long long boxOffice[3]; // US, non-US, world enum unit {US, NON_US, WORLD}; publi
class Movie {
// data is private by default
string title, studio;
short releaseYear, rank[3]; // US, non-US, world
long long boxOffice[3]; // US, non-US, world
enum unit {US, NON_US, WORLD};
public:
Movie();
Movie(string);
string getTitle() const;
string getStudio() const;
int getReleaseYear() const;
int getUSRank() const;
int getNonUSRank() const;
int getWorldRank() const;
long long getUSBoxOffice() const;
long long getNonUSBoxOffice() const;
long long getWorldBoxOffice() const;
friend ostream& operator <<(ostream&, const Movie&);
private:
Movie(const Movie &); // private copy constructor blocks invocation
};
class Movies {
// data is private by default
//static const int MAX_MOVIES = 1000;
//Movie *movies;
short movieCnt;
map<string, Movie> movies;
public:
Movies(string);
//int getMovieCount() const;
//const Movie* getMovie(string, int&) const;
//const Movie * operator[](int) const;
~Movies();
private:
void loadMovies(string);
string myToLower(string) const;
void reSize();
};
I am using this copy constuctor to insert data in the movie object in map.
Movie::Movie(string temp) {
istringstream iS(temp);
getline(iS, title, '\t');
getline(iS, studio, '\t');
iS >> releaseYear >> rank[US] >> boxOffice[US] >> rank[NON_US]
>> boxOffice[NON_US] >> rank[WORLD] >> boxOffice[WORLD];
}
void Movies::loadMovies(string fn) {
ifstream iS(fn);
string s,movieTitle;
getline(iS, s); // skip heading
getline(iS, s);
movieCnt=0;
//movies = new Movie[MAX_MOVIES];
while(!iS.eof()) {
//movies[movieCnt++] = Movie(s);
getline(iS, movieTitle, '\t');
movies.insert(movieTitle,Movie(s));
cout<<movies[movieTitle].title<<" "<<movies[movieTitle].studio;
getline(iS, s);
}
iS.close();
reSize();
}
类电影{
//默认情况下,数据是私有的
字符串标题,工作室;
短期发布年,排名[3];//美国,非美国,世界
长期票房[3];//美国、非美国、世界
枚举单位{美国、非美国、世界};
公众:
电影();
电影(弦乐);
字符串getTitle()常量;
字符串getStudio()常量;
int getReleaseYear()常量;
int getUSRank()常量;
int getNonUSRank()常量;
int getWorldRank()常量;
long-long getUSBoxOffice()常量;
long getNonUSBoxOffice()常量;
long-long getWorldBoxOffice()常量;
friend ostream&operator releaseYear>>排名[美国]>>票房[美国]>>排名[非美国]
>>票房[非美国]>>排名[世界]>>票房[世界];
}
void Movies::loadMovies(字符串fn){
如果流是(fn);
弦乐s,电影;
getline(iS,s);//跳过标题
getline(iS,s);
movieCnt=0;
//电影=新电影[MAX_movies];
而(!iS.eof()){
//电影[movieCnt++]=电影;
getline(即电影标题“\t”);
电影。插入(电影字幕,电影);
你可以编译和运行,但行为不符合预期?会发生什么?要在映射中插入元素,你需要创建对,然后你可以使用电影。insert(std::pair(movieTitle,Movie))
。看看@DOOM:给定C++11标记,我会使用std::map::emplace而不是insert:movies.emplace(title,Movie)@我现在的疑问是如何调用Movie的copy构造函数。当我调用Movie时,我正在调用copy构造函数,它获取文件的字符串数据并将数据加载到相应的元素中。我能够将movies加载到映射中。但现在我面临着从getMovies函数返回Movie类对象的问题。
const Movie* Movies::getMovie(string mc) const {
map<string, Movie>::const_iterator it = movies.find(mc);
//Here I want to know how to return Movie object?