对于使用find()和operator []访问地图的2个地图,我有一个通用算法。但是,在代码中的其他地方,我需要遍历这些映射,并且需要对其中一个映射进行排序,并与另一个进行反向比较。我最终使用了该映射的反向迭代器,但分析表明,在解引用反向迭代器时浪费了大量时间。我试图做到以下几点,但它显然没有工作:具有不同比较函数的地图的常用算法
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
...
}
任何想法,我怎么能得到这个工作?我有一种感觉,模板可以做些什么,但我不熟悉泛型编程。
你是怎么配置的?确保在分析时启用优化。反向迭代器添加了一层经常可以优化的复杂性。 –
@FrançoisAndrieux我在MSVC中使用了性能向导,并通过最大化速度优化进行编译 –
也许我错过了一些东西,但是难道您不能仅将地图类型的算法模板化为T? –