怎么获得在自定义结构里的特定元素?

发布于 2022-09-02 10:15:40 字数 482 浏览 14 评论 0

现在有一个自定义的结构:

common.hpp

struct vote
{
  int user; // ID of the user
  int item; // ID of the item
  float value; // Rating
};

typedef struct vote vote;

然后有一个set继承了这个结构:

language.hpp

std::set<vote*> testVotes;

然后我现在想遍历每一个用户,然后找到每一个他还没有评过分的商品。也就是说,对于一个user id,例如是3,把那些没有和3一起出现在testVote的item id找出来。

又因为,这上面的代码其实是别人写的,而且有几千行了,如果改了结构的话就差不多要重写整个程序。我希望可以在原有代码的基础上,通过增加代码来做到我想做的事,谢谢各位大大!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

治碍 2022-09-09 10:15:40

先遍历一遍,分别存两个set,然后再把指定用户已经评价的去除掉,大致如下

std::set<int> tmp;
std::set<int> rtn;
for (auto it = testVotes.begin(); it!=testVotes.end(); ++it)
{
    if (3 == (*it)->user)
    {
        tmp.add((*it)->item);
    }
    else
    {
        rtn.add((*it)->item);
    }
}
for (auto it = tmp.begin(); it!=tmp.end(); ++it)
{
    rtn.remove(*it);
}

return rtn;
煮酒 2022-09-09 10:15:40

也就是说,对于一个user id,例如是3,把那些没有和3一起出现在testVote的item id找出来。

我不明白你这句话什么意思,如果要遍历set你用迭代器。

for (auto it=testVotes.begin();it!=testVotes.end();++it){
    (*it)->user;
    (*it)->item;
}

是要这样?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文