Multimap上的C++通用编程
C++ Generic Programming on Multimap
多映射如下所示:
int main() {
multimap<int, string> coll;
coll = { {5, "tagged"} ,
{2, "a"} ,
{1, "this"} ,
{4, "of"} ,
{6, "strings"} ,
{1, "is"} ,
{3, "multimap"}
};
}
现在,我想获得一个如下的函数模板,以逐个打印这些容器中的所有值元素,包括multimap
,但不限于这种类型的映射和这对特定的模板参数。
void PrintAllMaps(multimap<int, string> map) {
for (auto elem : map) {
cout << elem.second << ' ';
}
cout << endl;
}
包括多映射但不限于
如果我理解正确,你想要一个模板模板功能:
template <
typename T1,
typename T2,
typename T3,
typename T4,
template <typename, typename, typename, typename> class M>
void PrintAllMaps(M<T1, T2, T3, T4>& map) {
...
}
请注意,std::multimap
和其他类似std::map
的容器实际上需要两个以上的模板参数,其余的都具有默认类型。
请参阅实时演示
我在通用容器函数方面运气不错:
template <class Map>
void PrintMapToStream(std::ostream &stream, const Map &map) {
for (auto &elem : map)
stream << elem.second << ' ';
stream << std::endl;
}
当然,如果您在不允许对其进行迭代的情况下调用它,那么这将失败,并显示令人困惑的错误消息。
template <class TKey>
template <class TValue>
void PrintMapToStream(std::ostream &stream, multimap<TKey, TValue> map)
{
for (auto elem : map)
stream << elem.second << ' ';
stream << std::endl;
}
然后只是:
PrintMapToStream(std::cout, map);
相关文章:
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 模板元编程:如何将参数包组合成新的参数包
- Qt Q串行端口未编程设备未关闭
- 模板元编程 - 尝试实现维度分析
- 我是编程新手
- C++编程从外部文本文件定义数组大小
- 了解算法的性能差异(如果以不同的编程语言实现)
- 使用 Gtkmm 以编程方式选择 Gtk::TextView 中的文本
- 如何将可变参数模板转换为多个单个模板?(C++竞争编程调试模板)
- 使用命名空间正确编程
- C++编程:运算符重载中的引用如何工作?
- Arduino 模块化编程与全局和设置
- C++ 运算符修改/元编程策略,用于不那么冗长的语法
- 在没有管理员权限的情况下,在 c++ 中以编程方式将程序添加到启动
- 如何以编程方式将音频从任何录制设备路由到任何播放设备
- 试图修复一个错误,该错误不会让我开始编程其余部分
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- Frank Luna 在他的书"使用 DirectX12 进行 3D 游戏编程"的介绍中盒子示例的问题
- 如何使用可变参数模板类使用模板元编程获得最大值