如何插入地图的多图?

时间:2016-01-03 21:00:16

标签: dictionary insert multimap

如何在以下地图中插入元素?

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

1 个答案:

答案 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())));

不工作,我认为是一样的。