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?