こんにちわ、池内と申します
<1...@gw.zeus.jsdlab.co.jp> の、
"[vcpp 00035183] STLのmapのinsertでコンパイルエラー" において、
"赤塚 慶 <k...@jsdlab.co.jp>"さんは書きました:
> list<Cell*>::iterator iter_x;
> list<Cell*>::iterator iter_y;
>
> map<list<Cell*>::iterator,list<Cell*>::iterator> interaction_map;
mapに挿入するには大小の比較ができる必要がありますが、list<_T>::iteratorは
大小の比較ができないのでmapで扱うことはできないんじゃないかと・・・
以下はiteratorを比較するコードですがコンパイル出来ません。
--- ココから ---
#include<list>
using namespace std;
int main(int argc, char* argv[])
{
list<int>::iterator it1, it2;
if(it1<it2)
{
}
return 0;
}
--- ココまで ---
解決策としてはiteratorをラップしてはどうでしょうか??
--- ココから ---
#include<list>
#include<map>
using namespace std;
template<class _T>
class wrap_iterator{
private:
_T::iterator m_iterator;
public:
wrap_iterator(_T::iterator i):m_iterator(i){};
bool operator<(const wrap_iterator&x)const{
return this<(&x);//適当にアドレスで比較する。
};
};
int main(int argc, char* argv[])
{
typedef map<wrap_iterator<list<int> >, wrap_iterator<list<int> > > my_map;
list<int>::iterator row_iter;
list<int>::iterator col_iter;
my_map interaction_map;
interaction_map.insert(
my_map::value_type(wrap_iterator<list<int> >(row_iter),
wrap_iterator<list<int> >(col_iter))
);
return 0;
}
--- ココまで ---
ついでに、map::insert()には下記の3つのバージョンがありますが、
私が示したサンプルでは1番目のバージョンを使用しています。
1:pair<iterator, bool> insert(const value_type& x);
2:iterator insert(iterator it, const value_type& x);
3:void insert(const value_type *first, const value_type *last);
NT4.0 VC++6.0 SP3 で試しました。
--
Hideo Ikeuchi
Demo Mod Otaku 古戦場 http://demo.and.or.jp/
E-mail i...@and.or.jp
<1...@gw.zeus.jsdlab.co.jp> の、
"[vcpp 00035183] STLのmapのinsertでコンパイルエラー" において、
"赤塚 慶 <k...@jsdlab.co.jp>"さんは書きました:
> list<Cell*>::iterator iter_x;
> list<Cell*>::iterator iter_y;
>
> map<list<Cell*>::iterator,list<Cell*>::iterator> interaction_map;
mapに挿入するには大小の比較ができる必要がありますが、list<_T>::iteratorは
大小の比較ができないのでmapで扱うことはできないんじゃないかと・・・
以下はiteratorを比較するコードですがコンパイル出来ません。
--- ココから ---
#include<list>
using namespace std;
int main(int argc, char* argv[])
{
list<int>::iterator it1, it2;
if(it1<it2)
{
}
return 0;
}
--- ココまで ---
解決策としてはiteratorをラップしてはどうでしょうか??
--- ココから ---
#include<list>
#include<map>
using namespace std;
template<class _T>
class wrap_iterator{
private:
_T::iterator m_iterator;
public:
wrap_iterator(_T::iterator i):m_iterator(i){};
bool operator<(const wrap_iterator&x)const{
return this<(&x);//適当にアドレスで比較する。
};
};
int main(int argc, char* argv[])
{
typedef map<wrap_iterator<list<int> >, wrap_iterator<list<int> > > my_map;
list<int>::iterator row_iter;
list<int>::iterator col_iter;
my_map interaction_map;
interaction_map.insert(
my_map::value_type(wrap_iterator<list<int> >(row_iter),
wrap_iterator<list<int> >(col_iter))
);
return 0;
}
--- ココまで ---
ついでに、map::insert()には下記の3つのバージョンがありますが、
私が示したサンプルでは1番目のバージョンを使用しています。
1:pair<iterator, bool> insert(const value_type& x);
2:iterator insert(iterator it, const value_type& x);
3:void insert(const value_type *first, const value_type *last);
NT4.0 VC++6.0 SP3 で試しました。
--
Hideo Ikeuchi
Demo Mod Otaku 古戦場 http://demo.and.or.jp/
E-mail i...@and.or.jp