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 回答