STL::multimap 的使用问题
#pragma warning(disable: 4786)#pragma warning(disable: 4096)#include <math.h>#include <map>#include <algorithm>#include <iostream>using namespace std;#include "afxmt.h"typedef multimap <string, string> mmss;typedef multimap <string, string>::const_iterator CIT; typedef multimap <string, string>::iterator IT; typedef pair<CIT, CIT> Range;void main(){ multimap<int, int>hello; hello.insert(make_pair(2,3)); multimap<LPCTSTR, LPCTSTR> efg; efg.insert(make_pair("3", "4")); multimap <string, string> DNS_daemon; DNS_daemon.insert(make_pair("213.108.96.7","cppzone.com")); DNS_daemon.insert(make_pair("213.108.96.7","cppluspluszone.com")); cout<<DNS_daemon.count("213.108.96.7") << " elements associated" << endl; Range range=DNS_daemon.equal_range("213.108.96.7"); for(CIT i=range.first; i!=range.second; ++i) cout << (i->second).c_str()<< endl; DNS_daemon.insert(make_pair("219.108.96.70", "pythonzone.com")); CIT cit=DNS_daemon.upper_bound("213.108.96.7"); if (cit!=DNS_daemon.end()) //found anything? cout<<(cit->second).c_str()<<endl; //display: pythonzone.com // 插入有相同键的多个值 DNS_daemon.insert(make_pair("219.108.96.70","pythonzone.com")); DNS_daemon.insert(make_pair("219.108.96.70","python-zone.com")); // 获得第一个值的迭代指针 cit=DNS_daemon.upper_bound("213.108.96.7"); // 输出: pythonzone.com,python-zone.com while(cit!=DNS_daemon.end()) { cout<< (cit->second).c_str()<<endl; ++cit; }}
c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2784: 'bool __cdecl std::operator <(const class std::_Tree<_K,_Ty,_Kfn,_Pr,_A> &,const class std::_Tree<_K,_Ty,_Kfn,_Pr,_A> &)' : could not deduce template argument for 'c
onst class std::_Tree<_K,_Ty,_Kfn,_Pr,_A> &' from 'const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'
c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::opera
tor ()(const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &) const'
c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2784: 'bool __cdecl std::operator <(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : could not deduce te
mplate argument for 'const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &' from 'const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'
c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::opera
tor ()(const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &) const'
c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2784: 'bool __cdecl std::operator <(const struct std::pair<_T1,_T2> &,const struct std::pair<_T1,_T2> &)' : could not deduce template argument for 'const struct std::pair<
_T1,_T2> &' from 'const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'
c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::opera
tor ()(const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &) const'
c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2676: binary '<' : 'const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' does not define this operator or a conversion to a type
acceptable to the predefined operator
c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::opera
tor ()(const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &) const'
Error executing cl.exe.
EX32.exe - 6 error(s), 0 warning(s)
大家帮我看看怎么解决这个问题。
[解决办法]
c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2784: 'bool __cdecl std::operator <(const class std::multimap <_K,_Ty,_Pr,_A > &,const class std::multimap <_K,_Ty,_Pr,_A > &) ' : could not deduce template argument for 'const
这个意思就是无法通过参数正确的推导,应该是const的关系
[解决办法]
string st("3"), st2("4"); multimap<string, string> efg; efg.insert(make_pair(st, st2)); multimap <string, string> DNS_daemon; string str("213.108.96.7"), str2("cppzone.com"); DNS_daemon.insert(make_pair(str, str2));
[解决办法]
#pragma warning(disable: 4786)#pragma warning(disable: 4096)#include <math.h>#include <map>#include <algorithm>#include <iostream>#include <string> // 加上这个using namespace std;#include "afxmt.h"typedef multimap <string, string> mmss;typedef multimap <string, string>::const_iterator CIT; typedef multimap <string, string>::iterator IT; typedef pair<CIT, CIT> Range;void main(){ multimap<int, int>hello; hello.insert(make_pair(2,3)); multimap<LPCTSTR, LPCTSTR> efg; efg.insert(make_pair<LPCTSTR, LPCTSTR>("3", "4")); // 因为"3", "4"的type 都是const char[2],不是LPCTSTR multimap <string, string> DNS_daemon; DNS_daemon.insert(make_pair<string, string>("213.108.96.7","cppzone.com")); // 同理 DNS_daemon.insert(make_pair<string, string>("213.108.96.7","cppluspluszone.com")); // 同理 cout<<DNS_daemon.count("213.108.96.7") << " elements associated" << endl; Range range=DNS_daemon.equal_range("213.108.96.7"); for(CIT i=range.first; i!=range.second; ++i) cout << (i->second).c_str()<< endl; DNS_daemon.insert(make_pair<string, string>("219.108.96.70", "pythonzone.com")); // 同理 CIT cit=DNS_daemon.upper_bound("213.108.96.7"); if (cit!=DNS_daemon.end()) //found anything? cout<<(cit->second).c_str()<<endl; //display: pythonzone.com // 插入有相同键的多个值 DNS_daemon.insert(make_pair<string, string>("219.108.96.70","pythonzone.com")); // 同理 DNS_daemon.insert(make_pair<string, string>("219.108.96.70","python-zone.com")); // 同理 // 获得第一个值的迭代指针 cit=DNS_daemon.upper_bound("213.108.96.7"); // 输出: pythonzone.com,python-zone.com while(cit!=DNS_daemon.end()) { cout<< (cit->second).c_str()<<endl; ++cit; }}