Tôi gặp sự cố nhỏ khi tìm phần tử trong vectơ của shared_ptr
.Tìm phần tử trong vùng chứa shared_ptr?
Đây là những gì tôi đã kết thúc với:
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;
}
Tuy nhiên, tôi đã không quản lý để làm điều đó với std::find
hoặc thậm chí std::find_if
. Có cách nào tương thích hơn C++ để đạt được điều này không?
EDIT: Đây là đoạn code tôi có sau khi câu trả lời:
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();
}
Vì vậy, bạn đang tìm kiếm một 'shared_ptr' đến một pointer_ _raw cụ thể? –
Như một lưu ý phụ, nếu bạn cần tìm các phần tử trong thùng chứa của bạn thì vector <> không nên là vùng chứa của bạn. Bạn sẽ nhận được hiệu suất tốt hơn nhiều với một container (sắp xếp) theo thứ tự – eladidan
Có, 'std :: set' đến với tâm trí. – user1095108