现在我有:
struct vote
{
int user; // ID of the user
int item; // ID of the item
float value; // Rating
};
typedef struct vote vote;
并且 testVotes 迭代此数据类型:
std::set<vote*> testVotes;
给定的testVotes指向的投票数据包含某个用户对某个item打分的信息。现在我想获取用户的项目,比方说,第一个用户(用户 id =1)还没有评价。
另外,由于这段代码是别人写的,已经有几千行了,我不想改变现有的结构。如何在不更改现有代码的情况下做我想做的事?
提前致谢!
----------------------------新需求---------------- ----------------------
给定一个已知元素用户 id 3 和另一个已知元素项目 id 5,我怎样才能得到对应的元素值 (3, 4, ?)?
最佳答案
如果为单个特定用户寻找解决方案,函数可以构建 std::set
他/她评价的所有项目:
std::set<int> rated_items(int user) {
std::set<int> result;
for (auto p : testVotes) {
if (p->user == user) result.insert(p->item);
}
}
但是,如果您需要为所有用户执行此操作,那么构建一个从用户到评分项目的单一映射会更有效:
std::map<int, std::set<int>> rated_items() {
std::map<int, std::set<int>> result;
for (auto p : testVotes) {
result[p->user].insert(p->item);
}
}
知道用户对哪些项目进行了评分,就可以轻松了解用户未对哪些项目进行评分。
PS:数据结构std::set<vote *>
看起来是一个非常有问题的选择(std::set<vote>
似乎更合理,或者 std::vector<vote>
如果同一个用户可以多次评价同一个项目)。
与糟糕的数据结构永远生活的悲伤相比,已经编写的数千行算不了什么。
关于c++ - 如何从 C++ 中的自定义结构数据中获取特定元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34244361/