recherche

Maison  >  Questions et réponses  >  le corps du texte

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

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

common.hpp

1

2

3

4

5

6

7

8

9

<code>struct vote

{

  int user; // ID of the user

  int item; // ID of the item

  float value; // Rating

};

 

typedef struct vote vote;

</code>

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

language.hpp

1

2

<code>std::set<vote*> testVotes;

</code>

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

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

阿神阿神2814 Il y a quelques jours458

répondre à tous(2)je répondrai

  • PHP中文网

    PHP中文网2017-04-17 13:31:41

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    <code>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;</code>

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-17 13:31:41

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

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

    1

    2

    3

    4

    <code>for (auto it=testVotes.begin();it!=testVotes.end();++it){

        (*it)->user;

        (*it)->item;

    }</code>

    是要这样?

    répondre
    0
  • Annulerrépondre