【问题标题】:How to store a list in a map in c++?如何在 C++ 中的地图中存储列表?
【发布时间】:2018-05-04 00:47:25
【问题描述】:

编辑:

如果您遇到这种情况,混淆是与 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;
}

电影.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;
    }
}

电影.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 函数中。

我感觉它与指针有关,但我对它们还不是很满意!

【问题讨论】:

    标签: c++ stl std


    【解决方案1】:

    代码有效*

    让您的函数打印值,您将看到您将获得所需的输出:

    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发帖。

    【讨论】:

    • 肯定能得到正确答案,谢谢帮助。调试器非常有用..
    猜你喜欢
    • 2020-12-13
    • 2012-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    相关资源
    最近更新 更多