我試圖通過一些特殊的方式來組織數據。我加入了一段簡單的代碼,證明了我的痛苦。C++ STL:通過迭代器將地圖搜索映射到另一個地圖
我不能使用提升。 我在cygwin中使用最新版本的g ++。
#include <iostream>
#include <map>
using namespace std;
int main() {
map< int,int > genmap;
map< int,int >::iterator genmapit;
map< map<int,int>::iterator,int > itermap;
// insert something into genmap
genmap.insert (make_pair(1,500));
// find and return iterator.
genmapit=genmap.find(1);
// insert the iterator/int into itermap. Dies on each of the following 3 versions of this line.
//itermap[genmapit] = 600; // crash
//itermap.insert (pair< map<int,int>::iterator,int >(genmapit,600)); // crash
itermap.insert (make_pair(genmapit,600)); // crash
return 0;
}
因此,大家可以看到,我有1個簡單的地圖,一個迭代到地圖和其它具有第一個參數是一個迭代的第一張地圖的地圖。
由此可見: Why can't I put an iterator in map? 我可以有一個迭代器作爲第二個參數。然而,上面顯示的方式提供這樣的:
$ make
g++ -c -o main.o main.cpp
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_function.h: In member fun
ction `bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp =
std::_Rb_tree_iterator<std::pair<const int, int> >]':
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_tree.h:871: instantiate
d from `std::pair<typename std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _All
oc>::iterator, bool> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::i
nsert_unique(const _Val&) [with _Key = std::_Rb_tree_iterator<std::pair<const in
t, int> >, _Val = std::pair<const std::_Rb_tree_iterator<std::pair<const int, in
t> >, int>, _KeyOfValue = std::_Select1st<std::pair<const std::_Rb_tree_iterator
<std::pair<const int, int> >, int> >, _Compare = std::less<std::_Rb_tree_iterato
r<std::pair<const int, int> > >, _Alloc = std::allocator<std::pair<const std::_R
b_tree_iterator<std::pair<const int, int> >, int> >]'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_map.h:360: instantiated
from `std::pair<typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_
Select1st<std::pair<const _Key, _Tp> >, _Compare, _Alloc>::iterator, bool> std::
map<_Key, _Tp, _Compare, _Alloc>::insert(const std::pair<const _Key, _Tp>&) [wit
h _Key = std::_Rb_tree_iterator<std::pair<const int, int> >, _Tp = int, _Compare
= std::less<std::_Rb_tree_iterator<std::pair<const int, int> > >, _Alloc = std:
:allocator<std::pair<const std::_Rb_tree_iterator<std::pair<const int, int> >, i
nt> >]'
main.cpp:23: instantiated from here
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_function.h:227: error: no
match for 'operator<' in '__x < __y'
make: *** [main.o] Error 1
「從這裏實例化」告訴我什麼,並在網上搜索讓我沒有這方面的信息。
STL:地圖根本不允許這個嗎?我可以重新編碼我的應用程序來解決這個問題,但效率很低,我希望能夠實現這個功能。是否有另一種類型的指針可以用於我可以使用的地圖元素?
謝謝你的時間。
這將是一個簡單的解決方案。指針作爲關鍵的地圖似乎非常快。謝謝。 – Travis 2009-10-28 08:17:25