加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 具有不同比较函数的地图的通用算法

发布时间:2020-12-16 10:07:56 所属栏目:百科 来源:网络整理
导读:我有一个2个地图的通用算法,使用find()和operator []来访问地图.但是,在代码的其他地方我需要迭代这些映射,其中一个需要与另一个进行反向比较.我最终使用了该映射的反向迭代器,但是分析显示我在取消引用反向迭代器时浪费了大量时间.我试着做以下几点,但它显
我有一个2个地图的通用算法,使用find()和operator []来访问地图.但是,在代码的其他地方我需要迭代这些映射,其中一个需要与另一个进行反向比较.我最终使用了该映射的反向迭代器,但是分析显示我在取消引用反向迭代器时浪费了大量时间.我试着做以下几点,但它显然不起作用:

struct Custom
{
    list<double> Doubles;
    int Integer = 0;
};

typedef map<double,Custom> CustomMap;
typedef map<double,Custom,std::greater<double>> CustomMapGreater;

CustomMap A;
CustomMapGreater B;

...

void Algorithm(bool aChosen)
{
    CustomMap* chosenMap;

    if (aChosen)
    {
        chosenMap = &A;
    }
    else
    {
        chosenMap = &B;    // Conversion not possible
    }

    // Algorithm that uses chosenMap follows
    ...
}

关于如何让这个工作的任何想法?我觉得模板可以做些什么,但我对通用编程并不十分熟练.

解决方法

模板方式如下:

template <typename Map>
void Algorithm(Map& map)
{
    // ...
}

或者,在您的具体情况下,甚至

template <typename Comp>
void Algorithm(std::map<double,Comp>& map)
{
    // ...
}

然后

void AlgorithmChooser(bool aChosen)
{
    if (aChosen) {
        Algorithm(A);
    } else {
        Algorithm(B);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读