首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Blitz++数组作为映射的键

Blitz++数组作为映射的键
EN

Stack Overflow用户
提问于 2013-11-28 12:29:18
回答 1查看 302关注 0票数 0

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

代码语言:javascript
复制
#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/bit/stl_ function .h:在成员函数‘bool std::less<_Tp>::operator()(const _Tp&,const _Tp&)中_Tp =blitz::_Tp&’: /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’

这是否需要<操作符的定义,如果是的话,我可以/应该自己定义它吗?

答案

正如吉米·汤普森所建议的,一个可能的解决办法是界定:

代码语言:javascript
复制
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;}
            }
        }
    }
};

然后

代码语言:javascript
复制
map<blitz::Array<int,1>,int, MyComparison> testmap;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-28 12:49:30

std::map文档声明默认情况下使用std::less比较键。这只会调用<,并期望返回truefalse

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

  1. 创建您自己的比较函数,如std::less,它返回一个布尔值,说明一个Blitz数组是否“小于”另一个Blitz数组(如何确定这取决于您)。假设您创建了这个函数并将其命名为MyComparison,那么您将创建您的映射,如下所示:map<blitz::Array<int,1>, int, MyComparison> testmap;。 struct MyComparison { bool运算符() (const blitz::Array &lhs,const blitz::Array &rhs) const { // Blitz数组比较};
  2. 将Blitz数组类型(blitz::Array<int,1>)封装在另一个对象中,重载给定对象的<操作符,然后在其中执行比较。例如: 类MyArrayWrapper { blitz::Array内容;public: // Constructor等bool operator<(const MyArrayWrapper &rhs) const { // Blitz数组比较};

然后在你现在的档案里。

代码语言:javascript
复制
    std::map<MyArrayWrapper,int> testmap;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20266266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档