C++ 闪电战++;数组作为映射的键

C++ 闪电战++;数组作为映射的键,c++,stl,blitz++,C++,Stl,Blitz++,我尝试使用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_

我尝试使用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));
#包括
#包括
使用名称空间std;
地图测试地图;
闪电战:阵列B(3);
B=1,2,3;
insert(make_对(B,2));
不编译。以下是错误:

在/usr/include/c++/4.6/string:50:0中包含的文件中

/usr/include/c++/4.6/bits/stl_function.h:成员函数中的“bool” std::less::operator()= 闪电战::阵列]':

/usr/include/c++/4.6/bits/stl_function.h:236:22:错误:无法转换 “闪电战”:BzBinaryExprResult, 闪电战::数组>::T_结果{aka blitz::bz_ArrayExpr,blitz::FastArrayIterator,blitz::Less>>}到 “bool”作为回报

这是一个需要定义
rhs.size()){return false;}
其他的
{

对于(inti=0;istd::map
文档声明默认情况下使用
std::less
比较键。这只是调用
std::map
文档声明默认情况下使用
std::less
比较键。这只是调用
std::map
文档声明键是共同的默认情况下使用
std::less
进行比较。这只是调用
std::map
文档声明默认情况下使用
std::less
比较键。当您说它“不起作用”时,这只是调用
说明它是如何工作的非常重要。我在编译器错误中进行了编辑。但我真的不知道它是什么意思。你是对的。我在中编辑了命名空间std。当你说它“不工作”时说明它是如何工作的非常重要。我在编译器错误中进行了编辑。但我真的不知道它是什么意思。你是对的。我在中编辑了命名空间std。当你说它“不工作”时说明它是如何工作的非常重要。我在编译器错误中进行了编辑。但我真的不知道它是什么意思。你是对的。我在中编辑了命名空间std。当你说它“不工作”时很重要的一点是要说明它是如何工作的。我在编译器错误中进行了编辑。但我真的不知道这意味着什么。你是对的。我在中编辑了名称空间std。感谢你详细的回答。我选择了版本1,因为它似乎是最轻量级的解决方案。我会将我的解决方案编辑到问题中。我不知道如何使用stl styl我在Blitz++文档中使用了迭代器,因此我的解决方案可能不是最有效的。实现是字典式的。如果您看到任何提高效率的方法,我很想知道。感谢您详细的回答。我选择了版本1,因为它似乎是最轻量级的解决方案。我将编辑我的解决方案。我没有看到h如何在Blitz++文档中使用stl风格的迭代器,因此我的解决方案可能不是最有效的。该实现是字典式的。如果您看到任何提高效率的方法,我很想知道。感谢您详细的回答。我选择了版本1,因为它似乎是最轻量级的解决方案。我将把我的解决方案编辑到问题中n、 我没有看到如何在Blitz++文档中使用stl风格的迭代器,因此我的解决方案可能不是最有效的。实现是字典式的。如果您看到任何提高效率的方法,我很想知道。感谢您详细的回答。我选择了版本1,因为它似乎是最轻量级的解决方案。我将编辑我的解决方案我没有在Blitz++文档中看到如何使用stl风格的迭代器,因此我的解决方案可能不是最有效的。实现是字典式的。如果你能找到任何方法使其更有效,我很想知道。
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;
struct MyComparison
{
    bool operator() (const blitz::Array<int, 1> &lhs, const blitz::Array<int, 1> &rhs) const
    {
        // Blitz array comparison
    }
};
class MyArrayWrapper
{
    blitz::Array<int, 1> contents;

public:
    // Constructor, etc.

    bool operator<(const MyArrayWrapper &rhs) const
    {
        // Blitz array comparison
    }
};
    std::map<MyArrayWrapper,int> testmap;