Mam mały problem ze znalezieniem elementu w wektorze shared_ptr
.Znajdowanie elementu w pojemniku shared_ptr?
Oto, co skończyło się z:
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;
}
Jednak nie udało się zrobić to z std::find
lub nawet std::find_if
. Czy istnieje lepszy sposób, aby to osiągnąć?
EDIT: Jest to kod mam po odpowiedź:
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();
}
Więc szukasz 'shared_ptr' do konkretnego _raw pointer_? –
Na marginesie, jeśli potrzebujesz znaleźć elementy w swoim pojemniku, wektor <> nie powinien być twoim ulubionym pojemnikiem. Otrzymasz znacznie lepszą wydajność z zamówionym (posortowanym) pojemnikiem – eladidan
Tak, 'std :: set' przychodzi na myśl. – user1095108