现在有一个自定义的结构:
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找出来。
又因为,这上面的代码其实是别人写的,而且有几千行了,如果改了结构的话就差不多要重写整个程序。我希望可以在原有代码的基础上,通过增加代码来做到我想做的事,谢谢各位大大!!!
PHP中文网2017-04-17 13:31:41
先遍歷一遍,分別存兩個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;
ringa_lee2017-04-17 13:31:41
也就是說,對於一個user id,例如是3,把那些沒有和3一起出現在testVote的item id找出來。
我不懂你這句話什麼意思,如果要遍歷set你用迭代器。
for (auto it=testVotes.begin();it!=testVotes.end();++it){
(*it)->user;
(*it)->item;
}
是要這樣?