c++ - 使用 vector 查找公共(public)元素的问题

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

我试图找到两个 vector 之间的公共(public)元素(歌曲列表),在我的 user.h 文件中我有两个 vector ,我试图在另一个类(help.cpp)中使用这个 vector ,但我无法正确处理。请问我的代码有什么问题?它不运行,我不完全确定这是否是正确的方法。

用户.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 是同一类型对象的 vector 。

用户.h:

#pragma once
#include <string>
#include <vector>
#include <string>

using namespace std;

struct user {
    string name;
    int age;
    vector<string> song_list;
};

帮助.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; 放在 header 中是一个非常糟糕的想法。我保留它是因为它与手头的问题基本无关,但它确实应该更改。

关于c++ - 使用 vector 查找公共(public)元素的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20437640/

相关文章:

c++ - 我应该删除 .h 文件中的字符数组吗

c++ - 为什么 DirectX 全屏应用程序会出现黑色屏幕截图?

visual-studio - 错误 C1083 是否无法打开与整个程序优化相关的编译器生成的文件 'somePath\someFile.cod"?

javascript - 根据嵌套对象数组的深度生成节点号

javascript - 在事件触发器上借助函数(动态)创建对象的实例

C++11 正则表达式多行 : Why does the group ([^\\0]+\n)? some_text 在 match[1] 中包含所有内容?

c++ - 编译器在构造函数中计算出的成员偏移不正确

c++ - 使用单成员结构作为成员本身

javascript - 为什么在使用文字字符串和局部变量时我的结果不同

java - C++ 到 Java DepthFirstSearch 的转换