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();
}
だから、特定の_rawのpointer_に 'shared_ptr'を探していますか? –
補足として、コンテナ内の要素を検索する必要がある場合は、ベクトル<>を選択したコンテナにするべきではありません。あなたは順序付けされた(ソートされた)コンテナでもっと良いパフォーマンスを得るでしょう。 – eladidan
はい、 'std :: set'が気になります。 – user1095108