如何在以下地图中插入元素?
map<Longitud,multimap<Latitud, ID> > posicionGeo;
我试图像这样插入:
posicionGeo.insert(make_pair(x.getLongitude(),make_pair(x.getLatitude(),x.getID())));
但这不起作用。引发此错误:
In file included from /usr/include/c++/4.8/bits/stl_algobase.h:64:0,
from /usr/include/c++/4.8/bits/char_traits.h:39,
from /usr/include/c++/4.8/string:40,
from fecha.h:9,
from principal.cpp:2:
/usr/include/c++/4.8/bits/stl_pair.h: In instantiation of ‘std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&) [with _U1 = int; _U2 = std::pair<int, int>; _T1 = const float; _T2 = std::multimap<float, unsigned int>]’:
CrimeSearch.hxx:33:51: required from here
/usr/include/c++/4.8/bits/stl_pair.h:119:39: error: no matching function for call to ‘std::multimap<float, unsigned int>::multimap(const std::pair<int, int>&)’
: first(__p.first), second(__p.second) { }
^
/usr/include/c++/4.8/bits/stl_pair.h:119:39: note: candidates are:
In file included from /usr/include/c++/4.8/map:62:0,
from CrimeSearch.h:9,
from principal.cpp:4:
/usr/include/c++/4.8/bits/stl_multimap.h:235:9: note: template<class _InputIterator> std::multimap<_Key, _Tp, _Compare, _Alloc>::multimap(_InputIterator, _InputIterator, const _Compare&, const allocator_type&)
multimap(_InputIterator __first, _InputIterator __last,
^
/usr/include/c++/4.8/bits/stl_multimap.h:235:9: note: template argument deduction/substitution failed:
In file included from /usr/include/c++/4.8/bits/stl_algobase.h:64:0,
from /usr/include/c++/4.8/bits/char_traits.h:39,
from /usr/include/c++/4.8/string:40,
from fecha.h:9,
from principal.cpp:2:
/usr/include/c++/4.8/bits/stl_pair.h:119:39: note: candidate expects 4 arguments, 1 provided
: first(__p.first), second(__p.second) { }
^
In file included from /usr/include/c++/4.8/map:62:0,
from CrimeSearch.h:9,
from principal.cpp:4:
/usr/include/c++/4.8/bits/stl_multimap.h:219:9: note: template<class _InputIterator> std::multimap<_Key, _Tp, _Compare, _Alloc>::multimap(_InputIterator, _InputIterator)
multimap(_InputIterator __first, _InputIterator __last)
^
/usr/include/c++/4.8/bits/stl_multimap.h:219:9: note: template argument deduction/substitution failed:
In file included from /usr/include/c++/4.8/bits/stl_algobase.h:64:0,
from /usr/include/c++/4.8/bits/char_traits.h:39,
from /usr/include/c++/4.8/string:40,
from fecha.h:9,
from principal.cpp:2:
/usr/include/c++/4.8/bits/stl_pair.h:119:39: note: candidate expects 2 arguments, 1 provided
: first(__p.first), second(__p.second) { }
^
In file included from /usr/include/c++/4.8/map:62:0,
from CrimeSearch.h:9,
from principal.cpp:4:
/usr/include/c++/4.8/bits/stl_multimap.h:177:7: note: std::multimap<_Key, _Tp, _Compare, _Alloc>::multimap(const std::multimap<_Key, _Tp, _Compare, _Alloc>&) [with _Key = float; _Tp = unsigned int; _Compare = std::less<float>; _Alloc = std::allocator<std::pair<const float, unsigned int> >]
multimap(const multimap& __x)
^
/usr/include/c++/4.8/bits/stl_multimap.h:177:7: note: no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘const std::multimap<float, unsigned int>&’
/usr/include/c++/4.8/bits/stl_multimap.h:166:7: note: std::multimap<_Key, _Tp, _Compare, _Alloc>::multimap(const _Compare&, const allocator_type&) [with _Key = float; _Tp = unsigned int; _Compare = std::less<float>; _Alloc = std::allocator<std::pair<const float, unsigned int> >; std::multimap<_Key, _Tp, _Compare, _Alloc>::allocator_type = std::allocator<std::pair<const float, unsigned int> >]
multimap(const _Compare& __comp,
^
/usr/include/c++/4.8/bits/stl_multimap.h:166:7: note: no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘const std::less<float>&’
/usr/include/c++/4.8/bits/stl_multimap.h:157:7: note: std::multimap<_Key, _Tp, _Compare, _Alloc>::multimap() [with _Key = float; _Tp = unsigned int; _Compare = std::less<float>; _Alloc = std::allocator<std::pair<const float, unsigned int> >]
multimap()
^
/usr/include/c++/4.8/bits/stl_multimap.h:157:7: note: candidate expects 0 arguments, 1 provided
答案 0 :(得分:0)
我找到了解决方案,你可以分两步完成插入:
multimap<Latitud, ID> mymap;
mymap.insert(make_pair(x.getLatitude(),x.getID()));
posicionGeo.insert(make_pair(x.getLongitude(),mymap));
但我不知道为什么:
posicionGeo.insert(make_pair(x.getLongitude(),make_pair(x.getLatitude(),x.getID())));
不工作,我认为是一样的。