-1

セットの配列を宣言しました

std::set<md_core::Sample *> _SessionSet[MAX_SESSIONS];

今、私は2つの関数を書きました

 void insertIntoTrdSessionSet(unsigned char index, md_core::Sample *sample)
    {
        _SessionSet[index].insert(sample);
    }

    bool removeFromTrdSessionSet(md_core::Sample *sample, unsigned char i = MAX_SESSIONS)
    {
        if(i != MAX_SESSIONS)
        {
            if(_SessionSet[i].erase(sample))
                return true;
        }
        else
        {
            for(i = 0; i < MAX_SESSIONS ; i++)
            {
                if(_SessionSet[i].erase(sample))
                {
                    return true;
                }
            }
        }
        return false;
    }

今、セットから値を1つずつ抽出して削除しようとしましたが、構造体に値が存在しないことが示されています

  for(i = 0; i < MAX_SESSIONS ; i++)
                {
                    if(i != pMsg->_Session)
                    {
                        std::set<Sample *>::iterator it = pSub->_SessionSet[i].begin();
                        for(;it != pSub->_SessionSet[i].end(); it++)
                        {
                            sample = *it;
//now call delete for the sample

                                if(!pSub->removeFromTrdSessionSet(sample, i))
                                {
                                   logV(MD_WARN_MSG, "No such sample %d to delete from odrders map for  session %u", sample, index);
                                }
                        }
                    }
                }
4

2 に答える 2

0

あなたのセットはポインター値でソートされていますが、これはおそらくかなり役に立たないでしょう。いずれにせよ、オブジェクトの値ではなく、オブジェクトの ID によって処理されます。それが必要でない場合は、実際の値でソートする独自の順序を std::set (テンプレート引数) に指定する必要があります。

于 2013-06-24T13:43:07.920 に答える