ich eine Reihe von shared_ptr
habe und möchte einen Wert darin finden:Suchen Sie einen Wert in einem Satz von shared_ptr
typedef std::shared_ptr<int> IntPtr;
struct Compare {
bool operator() (const IntPtr& a, const IntPtr& b) {
return *a < *b;
}
};
std::set<IntPtr, Compare> s;
auto x = std::make_shared<int>(3);
s.insert(x);
bool found = s.find(std::make_shared<int>(3)) != s.end();
Es funktioniert, aber nicht effizient - es jedes Mal neu einen temporären Zeiger muß wenn Sie versuchen, einen Wert zu finden.
Gibt es einen anderen Weg?
Sieht aus wie Searching in a set of shared_ptr<QString> hat einige Ideen, die helfen könnten?
_ "es muss jedes Mal ein Temp-Zeiger neu erstellt werden, wenn man versucht, einen Wert zu finden." _ Was soll das heißen? –
Es ist das Argument von 's.find', das' std :: make_shared (3) ' –
Gombat
Es gibt auch' std :: find_if', und schließlich könnten Sie eine ungeordnete Menge verwenden? –