gpt4 book ai didi

c++ - Blitz++ 数组作为映射的键

转载 作者:行者123 更新时间:2023-11-28 00:37:44 26 4
gpt4 key购买 nike

我正在尝试使用 blitz++ 数组,因为我知道它们通常比其他形式的数组提供更高的性能。是否可以使用 blitz++ 数组作为 map 中的键?尝试

#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));

不编译。这是错误:

In file included from /usr/include/c++/4.6/string:50:0,

/usr/include/c++/4.6/bits/stl_function.h: In member function ‘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: error: cannot convert ‘blitz::BzBinaryExprResult, blitz::Array >::T_result {aka blitz::_bz_ArrayExpr, blitz::FastArrayIterator, blitz::Less > >}’ to ‘bool’ in return

这是一个需要定义 < 的问题吗?运算符,如果可以,我可以/应该自己定义吗?

回答

正如 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;

最佳答案

std::map文档指出使用 std::less 比较 key 默认情况下。这只是调用 <并期望返回 truefalse .

为了使用 Blitz 数组作为键,您需要执行以下操作之一:

  1. 创建您自己的比较函数,例如 std::less ,它返回一个 bool 值,说明一个 Blitz 数组是否比另一个数组“少”(您选择如何确定这取决于您)。假设您创建了这个函数并将其命名为 MyComparison ,然后您将按以下方式创建 map 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
    }
    };
  2. 将您的 Blitz 数组类型 ( blitz::Array<int,1> ) 包裹在另一个对象中,重载 <给定对象的运算符,然后在其中执行比较。例如:

    class MyArrayWrapper
    {
    blitz::Array<int, 1> contents;

    public:
    // Constructor, etc.

    bool operator<(const MyArrayWrapper &rhs) const
    {
    // Blitz array comparison
    }
    };

然后在你当前的文件中。

    std::map<MyArrayWrapper,int> testmap;

关于c++ - Blitz++ 数组作为映射的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20266266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com