[英]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.