我有一个User类,私人用户可以个性化用户的个人资料,例如姓名,年龄,收藏夹。我想比较两个给定用户的收藏夹并输出常见的收藏夹。因为我将使用向量,我的问题是如何将用户分组到vector(user1,user2),这样我就可以比较任何给定成员的收藏并输出结果。这就是我到目前为止所拥有的
using namespace std;
vector<string> user;
int adduser();
int adduser()
{
ofstream thefile;
thefile.open("users.txt", ios::app);
string firstname;
string lastname;
int age;
string favourites;
cout<<"Enter your Name: ";
cin>>name;
thefile << name << ' ';
cout<<"Enter your age: ";
cin>>age;
thefile << age << ",";
cout<<"Enter your favourites: ";
cin>>favourites;
thefile << favourites<< ",";
thefile.close();
cout<<" Completed."<<endl;
return 0;
}
common favourites()
{
//how do make it so i have something like user1 and user2
//which are both vectors so when i enter the name of
//user1 and user2 i can compare thier favourites and output the common ones
}
答案 0 :(得分:6)
您可以使用<algorithms>
库,假设您可以对矢量进行排序:
std::sort(user1.begin(), user1.end());
std::sort(user2.begin(), user2.end());
std::vector<string> common;
std::set_intersection(user1.begin(), user1.end(), user2.begin(), user2.end(), std::back_inserter(common));
答案 1 :(得分:1)
首先看看这个。我不相信你需要使用矢量。我倾向于更喜欢deque或list,除非有某些原因需要数据元素在内存中连续。 http://www.cplusplus.com/reference/algorithm/set_intersection/ http://www.cplusplus.com/reference/deque/
我建议您使用该功能的其他版本,以便设计一个仿函数来处理比较。您可能需要为用户定义结构。
struct user
{
std::string firstname;
std::string lastname;
int age;
std::deque<std::string> favorites;
}
std::deque<user> users[X]; // Define the constant X somewhere depending on number of users
你问一个设计问题,所以很明显答案可以继续下去。您可以使用构建块来设计程序。根据你到目前为止所做的最喜欢的事情,我并不是很清楚。您必须定义一个表示每个用户的结构,以及一个比较仿函数或静态函数,它可以按您想要的方式比较两个用户对象。可能有很多方法可以做到这一点。这些只是一些想法。您必须阅读一些C ++文档才能学习如何使用这些东西。