比较两个向量以获得公共元素/定义user1和user2

时间:2013-12-05 00:04:05

标签: c++ visual-c++ object vector stdvector

我有一个User类,私人用户可以个性化用户的个人资料,例如姓名,年龄,收藏夹。我想比较两个给定用户的收藏夹并输出常见的收藏夹。因为我将使用向量,我的问题是如何将用户分组到vector(user1,user2),这样我就可以比较任何给定成员的收藏并输出结果。这就是我到目前为止所拥有的

user.cpp

 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


 }  

2 个答案:

答案 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 ++文档才能学习如何使用这些东西。