我正在用C ++编写我的第一个STL程序,我正面临这个问题。
这是我的计划:
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
int n,m;
// n : number of file extenstions
// m : number of filenames to identify
string extension, type, filename;
cin >> n >> m;
unordered_map<string,string> hashmap;
while(n--)
{
cin >> extension >> type;
hashmap.insert(make_pair<string,string>(extension,type));
}
while(m--)
{
cin >> filename;
extension = filename.substr(filename.find_last_of('.')+1);
cout << extension << endl;
}
}
我的输入文件是:
5 6
html text/html
htm text/html
png image/png
svg image/svg+xml
txt text/plain
index.html
this.file.has.lots.of.dots.txt
nodotsatall
virus.exe
dont.let.the.png.fool.you
case.matters.TXT
我收到错误:no matching function for call to ‘make_pair(std::string&, std::string&)’
。我无法弄清楚问题。
答案 0 :(得分:2)
错误在行
中aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_0.exe
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_1.exe
zxcqw84c81d96792ec917b7asd541f68d70324c4eb20018b598c1d5e84182bd_0.exe
zxcqw84c81d96792ec917b7asd541f68d70324c4eb20018b598c1d5e84182bd_1.exe
zxcqw84c81d96792ec917b7asd541f68d70324c4eb20018b598c1d5e84182bd_2.exe
应该是
make_pair<string,string>(extension,type)
答案 1 :(得分:0)
首先,我宁愿使用make_pair(extension, type)
并让编译器在任何情况下推断出类型,以避免任何其他人建议的风险。
无论如何,我认为下面的详细信息从您的角度来看很有意思,因此将它们置于专门的回复中是值得的,希望它们也是正确的。
也就是说,请参阅documentation。
据我所知(我不是专家),你的案例中推断的类型将是T&amp; U&amp;,因此使用这对夫妇T, U
(作为<string, string>
)以函数原型结束,该函数原型不接受引用作为参数(这就是为什么你得到错误,特别是那个错误)。
您可以在您的情况下使用以下模式:
make_pair<string&,string&>(extension,type)
这个适用于您实际使用引用来初始化该对,并且您将需要与模板参数相同的内容。
同样,因为make_pair
可以很容易地推断出它的论证类型,你可以自由地省略它们,我强烈建议这样做。