对此肯定有一个简单的答案。
我有一个std::set或std::map或某种具有自然顺序的对象类型-说std::less。
我需要更改集合或映射以包含shared_ptr而不是T的副本。
所以我想要类似的东西:
using my_set std::set<std::shared_ptr<T>, std::less<*T>>;
但是我在如何指定“在T的____适配器上使用less适配器,以便它在已取消引用的成员上,而不在shared_ptrs上!”一词空白。
有等效的
std::less<std::dereference<std::shared_ptr<T>>>
吗? 最佳答案
虽然标准库可能尚未满足您的需求,但是我认为编写自己的std::dereference_less
很简单:
#include <memory>
#include <set>
namespace std
{
template<typename T>
struct dereference_less
{
constexpr bool operator ()(const T& _lhs, const T& _rhs) const
{
return *_lhs < *_rhs;
}
};
}
int main()
{
using key_type = std::shared_ptr<int>;
std::set<key_type, std::dereference_less<key_type>> mySet;
}
Demo(经过重构,具有类似您问题中的模板类型别名)
关于c++ - 如何简单地调整指针的集合或映射顺序谓词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39960165/