3

std::setは来るint値を含むものを持っています。今、私はイテレータを使用して、setcontansかどうかを調べvalueます。

しかし、私のアプリケーションはこの検索を非常に頻繁に使用し、イテレータを使用した検索は遅すぎます。次のようなことを実行できますか?

std::set<int> fdsockets;

void myfunc(int fd)
{
    if(fdsockets[fd] != fdsockets.end())
    {
            // my code
    }
}

しかし、G++を使用してコンパイルするとエラーが発生します

'fdsockets[fd]'の'operator[]'に一致しません

多分私は代わりに何かを使うことができますstd::setか?

ありがとう!

4

4 に答える 4

4

std::unorered_setまたは、バイナリ検索を使用した順序vector付けは、単純なメンバーシップテストに効果的です。インターガーの最大値が低い場合は、ルックアップテーブルが代わりになる可能性があります。

于 2012-11-09T13:15:53.800 に答える
4

欲しいらしいset::find()

if( fdsockets.find(fd) != fdsockets.end() )
{
      // my code
}
于 2012-11-09T13:17:40.863 に答える
2

std::setにはoperator[]はありません。

あなたはおそらく意味します

if(fdsockets.find(fd) != fdsockets.end())
于 2012-11-09T13:17:32.460 に答える
0

返される反復子が必要ない場合set::find(実際に fdsocket にアクセスするのではなく、存在をテストするだけです)、代替手段を次に示します。

if(fdsockets.count(fd))
{
        // my code
}
于 2012-11-09T14:16:10.080 に答える