Multimap上的C++泛型编程

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)

Jor*_*nee 5

包括多图,但不限于此

如果我理解正确,您需要模板模板功能:

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个以上的模板参数,其余的具有默认类型.

Live Demo


Chr*_*odd 5

我对通用容器功能运气不错:

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)

当然,如果你在不允许迭代对的东西上调用它,那么这将会导致混乱的错误消息失败.