枚举< - >字符串映射函数

时间:2011-06-08 16:28:30

标签: c++ templates

我目前有两个地图将枚举值链接到字符串,一个方向将文件输入转换为内部表示,另一个方向打印(调试)有关该内部表示的信息。我想将地图更改为矢量,以便更快地访问和转换。但是,这个按预期工作的功能将不起作用:

template<class T, class Y>
const T & map_value( const std::map<Y,T> &map, const Y &key )
{
    return (*map.find(key)).second;
}

所以我试着把它变成这个:

template<class Cont, class T, class Y>
const T & map_value( const Cont &map, const Y &key )
{
    return map[key];
}

但是我没有得到匹配的函数调用。我刚刚有一个顿悟写这个问题; const map没有成员operator[],这使得这很难做到。我应该如何编写map_value,以便vectormap尽可能快地运行?

2 个答案:

答案 0 :(得分:2)

这是单行。当然,为两种类型(地图和向量)重载它并不是太多开销。

事实上,这是实现这一目标的唯一方法。我理解拥有尽可能通用的功能的愿望 - 好! - 但是需要来封装相应的访问模式(findoperator [])。在您的情况下,该函数不执行任何操作,但访问数据结构。

答案 1 :(得分:2)

保留第一个定义,但更改第二个定义以涵盖所有向量。在程序中使用 both ,编译器将根据需要选择适当的版本。

template<class T, class Y>
const T & map_value( const std::map<Y,T> &map, const Y &key )
{
    return (*map.find(key)).second;
}

template<class T>
const T & map_value( const std::vector<T> &map, size_t key )
{
    return map[key];
} 
相关问题