gpt4 book ai didi

c++ - 将在 STL 集上运行的函数泛化到所有集合

转载 作者:太空狗 更新时间:2023-10-29 20:15:18 25 4
gpt4 key购买 nike

我创建了这个模板函数来查找和删除 shared_ptr 集合中的项目

template<class T>
bool FindAndDelete(set<shared_ptr<T>>& collection, shared_ptr<T> item)
{
auto foundItem = find(collection.begin(), collection.end(), item);
if(foundItem != collection.end())
{
collection.erase(foundItem);
return true;
}
else
{
return false;
}
}

问题:我怎样才能更多地概括它以涵盖所有集合? ( vector 、列表等...)

例如

template<class K, class T>
bool FindAndDelete(K<shared_ptr<T>>& collection, shared_ptr<T> item);

注意:我来自 C#,所以代码可能有点偏差 :) 请纠正我

最佳答案

如果你想从容器中移除元素,那么像这样的东西会起作用:

template<class K>
bool FindAndDelete(K& collection, typename K::value_type item);

请记住 value_type的 map 是 std::pair<key_type, mapped_type> ,因此您可能希望为它们提供特殊版本,例如

template<typename T, typename K>
bool FindAndDelete(std::map<T,K>K& collection,
typename std::map::<T,K>::key_type key);

对于 std::multimap 同样如此和 C++11 std::unordered_*变体。这些容器有 findstd::find 更高效的成员函数, 因此值得专门实现 findAndDelete利用这一点。

你也可以看看 std::remove_iferase remove idiom作为非关联容器实现的替代方案。如果您有重复项,这可能会更有效。

关于c++ - 将在 STL 集上运行的函数泛化到所有集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13561466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com