Поиск в std :: set без итератора Переполнение стека

я имею 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?

Спасибо!

3

Решение

std::unorered_set или заказанный vector с бинарным поиском более эффективны для простого теста членства. Если максимальное значение интергеров низкое, альтернативной может быть таблица поиска.

4

Другие решения

Звучит так, как ты хочешь set::find()

if( fdsockets.find(fd) != fdsockets.end() )
{
// my code
}
4

В std :: set нет оператора [].

Вы, наверное, имеете в виду

if(fdsockets.find(fd) != fdsockets.end())
2

Если вам не нужен итератор, set::find возвращает (вы просто проверяете существование, а не собираетесь получить доступ к fdsocket), вот альтернатива:

if(fdsockets.count(fd))
{
// my code
}
0
По вопросам рекламы [email protected]