我试图找到两个 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 文件中。
最佳答案
您似乎对类型与实例有些困惑。您正在创建一些单独的类型(我很确定)您只需要两个实例。例如,(在我看来)您确实希望 u1
和 u2
是同一类型对象的 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/