C++ 如何根据解引用的值对集合进行排序?

C++ 如何根据解引用的值对集合进行排序?,c++,set,C++,Set,假设我有一个setstd::set,我希望元素按它们所指向的整数排序,而不是按指针类型排序;是否有一些标准的comp函数可以从std库中使用?如果没有,我将如何申报这一套 我猜我必须定义我自己的比较函数,但实际情况如何?使用Sort a std::list with myclass::operator的解决方案使用Sort a std::list with myclass::operator的解决方案使用Sort a std::list with myclass::operator的解决方案使用

假设我有一个set
std::set
,我希望元素按它们所指向的整数排序,而不是按指针类型排序;是否有一些标准的
comp
函数可以从
std
库中使用?如果没有,我将如何申报这一套




我猜我必须定义我自己的比较函数,但实际情况如何?

使用Sort a std::list with myclass::operator的解决方案使用Sort a std::list with myclass::operator的解决方案使用Sort a std::list with myclass::operator的解决方案使用Sort a std::list with myclass::operator的解决方案有了myclass::operatorMay,我会问你为什么会有一组指向单整数的指针?@JohnZwinck我不会,我实际上有一组指向类的指针,它们有自己的
,考虑到所有这些,这几乎与我刚才链接的问题完全相同。您会发现它的解决方案也适用于您。@JohnZwinck类似,但它适用于按
std::sort()
排序的列表。在我的例子中,我需要声明一个类型为
std::set
的对象,我不知道怎么做!我发现了一个更好的副本。我可以问一下为什么你会有一组指向单整数的指针吗?@JohnZwinck我不会,我实际上有一组指向类的指针,它们都有自己的
,考虑到所有这些,这几乎完全是我刚才链接的问题的副本。您会发现它的解决方案也适用于您。@JohnZwinck类似,但它适用于按
std::sort()
排序的列表。在我的例子中,我需要声明一个类型为
std::set
的对象,我不知道怎么做!我发现了一个更好的副本。我可以问一下为什么你会有一组指向单整数的指针吗?@JohnZwinck我不会,我实际上有一组指向类的指针,它们都有自己的
,考虑到所有这些,这几乎完全是我刚才链接的问题的副本。您会发现它的解决方案也适用于您。@JohnZwinck类似,但它适用于按
std::sort()
排序的列表。在我的例子中,我需要声明一个类型为
std::set
的对象,我不知道怎么做!我发现了一个更好的副本。我可以问一下为什么你会有一组指向单整数的指针吗?@JohnZwinck我不会,我实际上有一组指向类的指针,它们都有自己的
,考虑到所有这些,这几乎完全是我刚才链接的问题的副本。您会发现它的解决方案也适用于您。@JohnZwinck类似,但它适用于按
std::sort()
排序的列表。在我的例子中,我需要声明一个类型为
std::set
的对象,我不知道怎么做!我找到了一个更好的复制品。酷,我绝对猜不到,谢谢!不客气。无需猜测——只需考虑一下模板参数的要求。像这样使用自定义比较器是相当常见的,而且这种用法非常普通。:)嗯,我得到了一个
错误:函数模板PComp不是一个类型名
错误…是的,我发布了一个函数模板而不是一个函子。我现在已经修好了。@xmoex:太好了,我绝对猜不到,谢谢!不客气。无需猜测——只需考虑一下模板参数的要求。像这样使用自定义比较器是相当常见的,而且这种用法非常普通。:)嗯,我得到了一个
错误:函数模板PComp不是一个类型名
错误…是的,我发布了一个函数模板而不是一个函子。我现在已经修好了。@xmoex:太好了,我绝对猜不到,谢谢!不客气。无需猜测——只需考虑一下模板参数的要求。像这样使用自定义比较器是相当常见的,而且这种用法非常普通。:)嗯,我得到了一个
错误:函数模板PComp不是一个类型名
错误…是的,我发布了一个函数模板而不是一个函子。我现在已经修好了。@xmoex:太好了,我绝对猜不到,谢谢!不客气。无需猜测——只需考虑一下模板参数的要求。像这样使用自定义比较器是相当常见的,而且这种用法非常普通。:)嗯,我得到了一个
错误:函数模板PComp不是一个类型名
错误…是的,我发布了一个函数模板而不是一个函子。我现在已经修好了。@xmoex:
template <typename T>
struct PComp
{
    bool operator ()(const T* a, const T* b) const
    {
       return *a < *b;
    }
};

std::set<int*, PComp<int> > my_set;