Hua*_*eng 2 c++ stl generic-programming
multimap如下所示:
int main() {
multimap<int, string> coll;
coll = { {5, "tagged"} ,
{2, "a"} ,
{1, "this"} ,
{4, "of"} ,
{6, "strings"} ,
{1, "is"} ,
{3, "multimap"}
};
}
Run Code Online (Sandbox Code Playgroud)
现在,我想得到一个像下面这样的函数模板,逐个打印这些容器中的所有值元素,包括multimap但不限于这种类型的映射和这对特定的模板参数.
void PrintAllMaps(multimap<int, string> map) {
for (auto elem : map) {
cout << elem.second << ' ';
}
cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
包括多图,但不限于此
如果我理解正确,您需要模板模板功能:
template <
typename T1,
typename T2,
typename T3,
typename T4,
template <typename, typename, typename, typename> class M>
void PrintAllMaps(M<T1, T2, T3, T4>& map) {
...
}
Run Code Online (Sandbox Code Playgroud)
请注意,std::multimap其他std::map类似的容器实际上需要2个以上的模板参数,其余的具有默认类型.
我对通用容器功能运气不错:
template <class Map>
void PrintMapToStream(std::ostream &stream, const Map &map) {
for (auto &elem : map)
stream << elem.second << ' ';
stream << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
当然,如果你在不允许迭代对的东西上调用它,那么这将会导致混乱的错误消息失败.
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |