gpt4 book ai didi

c++ - 具有不同比较功能的 map 的通用算法

转载 作者:太空狗 更新时间:2023-10-29 20:09:28 27 4
gpt4 key购买 nike

我有一个用于 2 个 map 的通用算法,它使用 find() 和 operator[] 来访问 map 。但是,在代码的其他地方,我需要遍历这些映射,其中一个需要通过与另一个的反向比较进行排序。我最终对该映射使用了反向迭代器,但分析显示我在取消引用反向迭代器上浪费了大量时间。我尝试执行以下操作,但显然没有用:

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, Custom, Comp>& map)
{
// ...
}

然后

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

关于c++ - 具有不同比较功能的 map 的通用算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46177448/

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