У меня возникла небольшая проблема с поиском элемента в векторе shared_ptr
.Поиск элемента в контейнере shared_ptr?
Вот что я закончил с:
std::vector<std::shared_ptr<Block>> blocks;
bool contains(Block* block) {
for (auto i = blocks.begin(); i != blocks.end(); ++i) {
if ((*i).get() == block) {
return true;
}
}
return false;
}
Однако я не сумел сделать это с std::find
или даже std::find_if
. Есть ли более C++-совместимый способ достичь этого?
EDIT: Это код, у меня есть после ответа:
bool contains(Block* block) {
auto found = std::find_if(blocks.begin(), blocks.end(), [block](std::shared_ptr<Block> const& i){
return i.get() == block;
});
return found != blocks.end();
}
Так что вы ищете 'shared_ptr' к конкретному _raw pointer_? –
В качестве побочного примечания, если вам нужно найти элементы в контейнере, тогда вектор <> не должен быть вашим контейнером выбора. Вы получите намного лучшую производительность с упорядоченным (отсортированным) контейнером – eladidan
Да, 'std :: set' приходит на ум. – user1095108