使用向量查找公共元素的问题

problems working with vectors to find common element

本文关键字:元素 问题 向量查找      更新时间:2023-10-16

我正试图找到两个向量之间的公共元素(song_list),在我的user.h文件中,我有两个向量,并试图在另一个类(help.cpp)中使用这个向量,但我做不到。请问我的代码怎么了?它没有运行,也不完全确定这是否是正确的方法。

user.h

   #pragma once
  #include <string>
  #include <vector>
  #include <string>
    using namespace std;
    class User
  {
public:
User(void);
~User(void);

      public:

struct user1
      {
        string name;
    int age;
    string song_list;
       };
       typedef vector <user1> u1;
       struct user2
       {
       string name;
   int age;
   string song_list;
       };
      typedef vector <user2> u2;
       };

帮助.cpp

  #include "Help.h"
  #include "User.h"
  #include <iterator>  
  #include <cstdlib>
  #include <iostream>
  #include <vector>
  #include <algorithm>


  int commonElements();
  int commonElements(){
  vector <user1> u1;
  vector <user2> u2;
  std::sort(u1.begin(), u1.end());
  std::sort(u2.begin(), u2.end());
  std::vector<string> common;
  std::set_intersection(u1.begin(), u1.end(), u2.begin(), u2.end(),                       
  std::back_inserter(common));
   cout<<common<<endl;
   }

到目前为止,这就是我的代码。用户姓名、年龄和歌曲列表的所有数据都在.txt文件中。

您似乎对类型与实例有些困惑。您正在创建一些单独的类型,其中(我很确定)您只需要两个实例。例如,(在我看来)您确实希望u1u2是相同类型对象的向量。

user.h:

#pragma once
#include <string>
#include <vector>
#include <string>
using namespace std;
struct user {
    string name;
    int age;
    vector<string> song_list;
};

help.cpp:

#include "Help.h"
#include "User.h"
#include <iterator>  
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
int commonElements(user &u1, user &u2) {
    sort(u1.song_list.begin(), u1.song_list.end());
    sort(u2.song_list.begin(), u2.song_list.end());
    vector<string> common;
    set_intersection(u1.song_list.begin(), u1.song_list.end(), 
                     u2.song_list.begin(), u2.song_list.end(), 
                     back_inserter(common));
    for (auto const &song : common) 
        cout << song << "n";
#if 0
    // alternatively, write the intersection directly to the stream:
    set_intersection(u1.song_list.begin(), u1.song_list.end(),
                     u2.song_list.begin(), u2.song_list.end(),
                     ostream_iterator<string>(cout, "n"));
#endif
}

顺便说一句,人们普遍认为在标头中放入using namespace std;是一个非常糟糕的想法。我之所以留下它,是因为它与手头的问题基本无关,但它真的应该改变。