c++ - 在向量中插入对象后如何更改代码
问题描述
在电影.hpp
#ifndef MOVIE_H
#define MOVIE_H
class Movie
{
private:
std::string title;
public:
std::string getTitle() const {return this->title;}
void setTitle(std::string newTitle){this->title = newTitle;}
};
#endif
在 Actor.hpp 中
#ifndef ACTOR_H
#define ACTOR_H
#include "Person.hpp"
#include "Movie.hpp"
class Actor: public Person
{
private:
std::vector<Movie> movieList;
public:
void addMovie(Movie newMovie){this->movieList.push_back(newMovie);}
void printMovies()
{
for(Movie movie: this->movieList)
{
std::cout << movie.getTitle() << '\n';
}
}
};
#endif
如果我添加一个单独的类,代码中会有哪些变化
class Role {
private:
Actor* actor;
Movie* movie;
};
并将此类对象的集合存储在 Movie 和 Actor 中
std::vector<Role> movieList; //inside Actor
std::vector<Role> actorList; //inside Movie
请有人通过使用上面定义的“角色”对象编辑 Movie.hpp 和 Actor.hpp 中的代码来帮助我。
解决方案
我将在这里使用一些数据库理论。
每部电影都有一个唯一的 ID 和标题:
class Movie
{
unsigned int m_id;
std::string m_title;
public:
Movie(unsigned int id, const std::string& title)
: m_id(id), m_title(title)
{ ; }
std::string get_title() { return m_title; }
void set_title(const std::string& title)
{ m_title = title; }
std::string get_id() {return m_id;}
void set_id(unsigned int id)
{ m_id = id;}
bool order_by_id(const Movie& b)
{
return m_id <= b.m_id;
}
bool operator==(const Movie& b)
{
return (m_id == b.m_id) && (m_title == b.title);
}
};
AnActor
是 aPerson
并且有关联(作用于)零或电影。在这种情况下,我们将拥有一个包含外键或Movie
ID 的容器。
class Actor : public Person
{
public:
std::vector<unsigned int> movie_ids;
//...
};
现在有一个电影数据库:
std::vector<Movie> movie_database;
要查找包含演员的电影,首先从演员那里获取电影 ID:
Actor judy_g;
unsigned int judy_g_first_movie = judy_g.movie_ids[0];
然后使用电影 ID 从数据库中检索电影:
Movie judy_g_movie = movie_databases[judy_g_first_movie];
这种技术很好,因为您不需要对电影数据库进行排序,您可以使用索引表来代替:
std::map<std::string, unsigned int> role_index_table;
// Associate the role "major" with the first movie.
role_index_table["major"] = 0;
如果它看起来像数据库并且闻起来像数据库,那么您应该使用数据库而不是自己编写数据库。
推荐阅读
- google-bigquery - 如何在 BigQuery 的列中创建重复的数字序列
- reactjs - react mui Datepicker/Calender中没有日历
- oracle - 甲骨文总计
- xcode - Storeboard 图像到 SwiftUI
- mongodb - Spring Mongo DB - 根据数组中的匹配元素检索文档
- typescript - Firestore 云功能:嵌套地图中的动态键
- c# - VB.NET 将一张图像粘贴到另一张图像中而不损失质量
- python - 对列应用操作
- javascript - 我的网站上的问题 - Javascrip 横幅滑块
- sql - 根据 SQL 中的其他 2 列递增列值