一般に、他の形式の配列よりも高いパフォーマンスを提供することを理解しているため、blitz++ 配列を使用しようとしています。blitz++ 配列をマップのキーとして使用することは可能ですか? しようとしている
#include <map>
#include <blitz/array.h>
using namespace std;
map<blitz::Array<int,1>,int> testmap;
blitz::Array<int,1> B(3);
B = 1,2,3;
testmap.insert(make_pair(B,2));
コンパイルしません。エラーは次のとおりです。
/usr/include/c++/4.6/string:50:0 からインクルードされたファイルで、
/usr/include/c++/4.6/bits/stl_function.h: メンバー関数内 'bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = blitz::Array]' :
/usr/include/c++/4.6/bits/stl_function.h:236:22: エラー: 変換できません 'blitz::BzBinaryExprResult, blitz::Array >::T_result {aka blitz::_bz_ArrayExpr, blitz::FastArrayIterator, blitz ::Less > >}' を 'bool' に変換
これは演算子の定義を要求する問題<
ですか? もしそうなら、自分で定義できますか?
答え
Jimmy Thompson が提案したように、考えられる解決策は次のように定義することです。
struct MyComparison
{
bool operator() (const blitz::Array<int, 1> &lhs, const blitz::Array<int, 1> &rhs) const
{
if (lhs.size() < rhs.size()) {return true;}
else if (lhs.size() > rhs.size()) {return false;}
else
{
for (int i=0; i<lhs.size(); i++)
{
if (lhs(i)<rhs(i)) {return true;}
else if(lhs(i)>rhs(i)) {return false;}
}
}
}
};
それで
map<blitz::Array<int,1>,int, MyComparison> testmap;