я имею std::set
который содержит прийти int
ценности. Теперь я использую итератор, чтобы узнать, set
contans value
,
Но мое приложение использует этот поиск очень часто и поиск с использованием итератора слишком медленный, могу ли я сделать что-то подобное:
std::set<int> fdsockets;
void myfunc(int fd)
{
if(fdsockets[fd] != fdsockets.end())
{
// my code
}
}
Но у меня ошибка при компиляции с использованием G ++
нет совпадения для ‘operator []’ в ‘fdsockets [fd]’
Может быть, я могу использовать что-то вместо std::set
?
Спасибо!
std::unorered_set
или заказанный vector
с бинарным поиском более эффективны для простого теста членства. Если максимальное значение интергеров низкое, альтернативной может быть таблица поиска.
Звучит так, как ты хочешь set::find()
if( fdsockets.find(fd) != fdsockets.end() )
{
// my code
}
В std :: set нет оператора [].
Вы, наверное, имеете в виду
if(fdsockets.find(fd) != fdsockets.end())
Если вам не нужен итератор, set::find
возвращает (вы просто проверяете существование, а не собираетесь получить доступ к fdsocket), вот альтернатива:
if(fdsockets.count(fd))
{
// my code
}