【发布时间】:2012-11-09 13:13:27
【问题描述】:
我有 std::set,其中包含 int 值。现在我使用迭代器来找出set是否包含value。
但是我的应用程序使用这种搜索非常频繁并且使用迭代器搜索太慢了,我可以这样做吗:
std::set<int> fdsockets;
void myfunc(int fd)
{
if(fdsockets[fd] != fdsockets.end())
{
// my code
}
}
但是使用 G++ 编译时出现错误
'fdsockets[fd]'中的'operator[]'不匹配
也许我可以用一些东西代替std::set?
谢谢!
【问题讨论】:
-
之所以更喜欢
find()而不是循环而不是集合的原因是find()是一个O(log(N)) 算法。循环比 O(N) 更糟糕(我怀疑它是 O(N*log(N)) 算法),因为operator++()对于那些关联容器来说相当复杂。 -
std::set 有一个 find() 方法,即 O(log(n))