c++ - 复制/分配 STL 模板,std::less 和 std:greater

标签 c++ templates sorting stl

我需要在 std::less 和 std::greater 模板之间进行选择,并将一个模板存储在另一个模板中(我想我使用的是 C++ STL 词汇表吧……?)。我有这个:

template<typename> class stSortOrder;
stSortOrder = std::less;
if(sortby == "descending")
    {
    stSortOrder = std::greater;
    }

显然它无法编译。我很确定这是因为我是 STL 的相对新手。


澄清:

我正在执行 this thread 中已接受的答案(公共(public)成员函数的变体)。

这是我想避免在 switch case 中重复的内容:

void CSubscriptionItem::sortMonitoredItems( int nColumnIndex, Qt::SortOrder ulOrder )
    {
    switch(nColumnIndex)
        {
        case CMonitoredItem::NAME:
            {
            if(ulOrder == Qt::DescendingOrder)
                {
                qSort(  m_qlpcMonitoredItems.begin(), 
                        m_qlpcMonitoredItems.end(), 
                        make_method_comparer<std::less>(&CMonitoredItem::getName) );
                }
            else
                {
                qSort(  m_qlpcMonitoredItems.begin(), 
                        m_qlpcMonitoredItems.end(), 
                        make_method_comparer<std::greater>(&CMonitoredItem::getName) );
                }
            break;
            }

我想用一个已经根据排序顺序参数设置的模板替换 make_method_comparer<> 中的 std::less 和 std::greater。这将真正有助于减少代码大小。

我已经考虑了两个发布的答案,但它们似乎不起作用 - 可能是因为我不太熟悉模板,我只是错误地使用了它们。

最佳答案

可以做到:

template <typename T>
struct comparer
{
    comparer(bool is_less) : is_less(is_less) {}

    bool operator()(const T& x, const T& y) const
    {
        return is_less ? std::less<T>()(x, y) : std::greater<T>()(x, y);
    } 

private:
    bool is_less;
};

但我宁愿这样做(更清晰):

template <typename T>
struct comparer
{
    bool operator()(const T& a, const T& b) const
    {
        return is_less ? a < b : b < a;
    }

private:
    bool is_less;
};

关于c++ - 复制/分配 STL 模板,std::less 和 std:greater,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7001009/

相关文章:

c++ - 我可以使用 .TLH 文件公开的所有功能吗?

c++ - 有没有一种方法可以声明复制构造函数是非公开的并使用默认复制构造函数?

c++ - 一个处理 char* 和 wchar_t* 的函数

c++ - 编译器提示模板参数的数量错误,即使它在 boost 库文件中是正确的

python - 删除重复的序列名称 pandas

c++ - 如何将 "using"用于函数?

c++ - 对数组中的数字求和

c++ - 枚举值的模板特化

javascript - 想要使用提供的 js 仅使用第 11 列和第 12 列进行排序

swift - 如何根据一对多关系中第一项的键路径对 Realm 结果进行排序?