关于map和make_pair的奇怪问题
编译如下的代码时,为何会提示make_pair identifier not found?
map make_pair
//
#include <iostream>
#include <map>
#include <string>
#include <utility>
using std::pair;
using std::map;
using std::string;
using std::cin;
using std::cout;
using std::endl;
int main()
{
// count number of times each word occurs in the input
map<string, int> word_count; // empty map from string to int
// insert default initialized element with key Anna; then assign 1 to its value
//word_count["Anna"]=1;
string word;
cout<<"\nInput as many words as you wish:\n";
while(cin>>word)
++word_count[word];
cin.clear();
make_pair("SunGohan",3);
getchar();
}
[解决办法]
即使添加了也会编译不过,还要这么改:
make_pair(string("SunGohan"),3);
[解决办法]
最好不要用using namespcae std;特别是把这句放在头文件中,任何引入命名空间都不要出现在头文件中。
在头文件中,直接在使用的地方加std::就可以了,或者少量的using std::XXX。
在实现文件中,可以视需要,比较频繁的几个用using std::XXX,或者在具体的函数定义内使用这句using namespcae std;,其余的直接在用到的地方加std::就好了。否则会使得命名空间无效,重新造成命名冲突的。比如你自己顶一个max模板,引入using namespace std试试就知道了。
using namespace std;你在VS下调用这个试试就知道了(VC6没这个问题,太老了不符合标准)
template<typename T>
T max(T a,T b){
return a>b?a:b;
}
总之using namespace(包括自己写的命名空间和std)自己写程序测试的时候随便用,工程里谨慎点。因为以后团队里代码不是你一个人写的,你不会知道别人写了什么。