C++ 错误:使用多重映射时无法在常量表达式中显示

C++ 错误:使用多重映射时无法在常量表达式中显示,c++,C++,我正在编写一个程序来回溯有多个线程的进程。我正在使用多重映射,以便每个线程的回溯可以映射到相应的threadid 代码如下: multimap<int,std::vector<strings >frames>> mt; multimap>mt; 。。。。。。。。。。。。 mt.insert(pair<int,std::vector<string>(threadid,funcname)); mt.insert(pairpair是在您

我正在编写一个程序来回溯有多个线程的进程。我正在使用多重映射,以便每个线程的回溯可以映射到相应的threadid

代码如下:

     multimap<int,std::vector<strings >frames>> mt;
multimap>mt;
。。。。。。。。。。。。

mt.insert(pair<int,std::vector<string>(threadid,funcname));

mt.insert(pairpair是在您未指定的类型上模板化的

你可以用

mt.insert(std::make_pair(threaded,funcname));

这将推导出模板参数,或者您可以显式指定它们(不建议这样做):

mt.insert(std::pair(threadId,funcname));

编辑:


make_pair存在的原因是,任何构造函数都是指定类的成员,因此无法推断其自身的类型。make_pair是一个自由函数,因此没有此限制。

一个明显的错误是缺少一个闭合角括号。请替换此项:

mt.insert(pair<int,std::vector<string>(threadid,funcname));

你的多重映射的类型不应该是
multimap
?做一个例子来说明这个问题。你知道为什么它们不同吗?为什么pair构造函数不能推导参数?为什么它是一个常量表达式?我使用了mt.insert(std::pair(threadId,funcname));仅…编译失败是因为that@Sarien
pair
是类模板,而不是具有模板化构造函数的类。必须通过提供模板参数来指定对的类型。mt.insert(std::make_pair(threadid,funcname));正在工作。非常感谢。如何遍历此多重映射?我正在对(多重映射::迭代器t=mt.begin();t!=mt.end();t++)使用以下方法{cout@user2380779您就快到了。错误是因为
i->second
std::vector
并且没有
ostream&operator
mt.insert(pair<int,std::vector<string> >(threadid,funcname));
//                                     ^ here
mt.insert(std::make_pair(threadid, funcname));