首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

STL:multimap 的使用有关问题

2012-03-14 
STL::multimap 的使用问题C/C++ code#pragma warning(disable: 4786)#pragma warning(disable: 4096)#incl

STL::multimap 的使用问题

C/C++ code
#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;    }}


编译提示错误:

--------------------Configuration: EX32 - Win32 Debug--------------------
Compiling...
main.cpp
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
 class std::multimap<_K,_Ty,_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::map<_K,_Ty,_Pr,_A> &,const class std::map<_K,_Ty,_Pr,_A> &)' : could not deduce template argument for 'const class std
::map<_K,_Ty,_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::_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的关系
[解决办法]

C/C++ code
       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));
[解决办法]
C/C++ code
#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;    }} 

热点排行