मैं 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
साथ यह करने के लिए प्रबंधित नहीं किया:
यहाँ मैं के साथ समाप्त हो गया है। क्या यह हासिल करने के लिए एक और सी ++ अनुपालन तरीका है?
संपादित: यह कोड मैं जवाब के बाद है:
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