簡體   English   中英

如何在C ++中的地圖中存儲列表?

[英]How to store a list in a map in c++?

編輯:

如果您遇到這種情況,那么混淆在於xcode調試器,而不是代碼本身。 代碼很好


C ++的新手,但不編程。

我不明白為什么在將它們插入地圖時未保存此列表的值。

main.cpp中

#include <iostream>
#include <string>
#include <memory>
#include <list>
#include <map>

#include "Movie.h"
#include "Date.h"
#include "Cinema.h"

using namespace std;

int main()
{
    Cinema cinema;

    string name = "transformers";
    Movie * transformers = new Movie(name, 2018, 6, 10);
    list<int> times;
    times.push_front(1200);
    times.push_front(1600);

    cinema.addMovie(transformers, times);

    cinema.printShowTimes(transformers);

    return 0;
}

cinema.cpp

#include "Cinema.h"
#include "Movie.h"

using namespace std;

Cinema::Cinema() {
}

void Cinema::addMovie(Movie * movie, list<int> & movie_time) {
    running_movies.push_front(movie);
    movie_times.insert(pair< Movie *, list<int> >(movie, movie_time));
}

void Cinema::printShowTimes(Movie * movie) {
    MovieMap::iterator it = movie_times.find(movie);

    if(it != movie_times.end()) {
        list<int> times = it->second;
    }
}

cinema.h

#ifndef CINEMA_H
#define CINEMA_H

#include "Movie.h"
#include <list>
#include <map>

typedef std::map< Movie *, std::list<int> > MovieMap;
typedef std::list< Movie * > MovieList;

class Cinema
{
  public:
    Cinema();
    Cinema(Cinema &);
    void addMovie(Movie *, std::list<int> &);

    void movieRunningAt(Movie &, std::list<int> &);
    void printShowTimes(Movie *);

  private:
    MovieList running_movies;
    MovieMap movie_times;
};

#endif

看來我的電影已正確保存,但時間列表只是printShowTimes中的垃圾值,即使它們存在於addMovie函數中也是如此。

代碼斷點

我覺得它與指針有關,但是我對它們還不太滿意!

該代碼有效*

使函數打印這些值,您將看到將獲得所需的輸出:

void printShowTimes(Movie * movie) {
    MovieMap::iterator it = movie_times.find(movie);

    if(it != movie_times.end()) {
        list<int> times = it->second;
        for (auto v : times)
            std::cout << v << "\n";
    }
}

請注意,C ++提供了std::unordered_map ,它可能滿足您的需要(“查詢電影並查找其時間”),因為順序似乎無關緊要。


*但是它以令人不安的方式使用指針。 考慮在Code Review中發布。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM