0

这是在 Mac OSX 10.8 上。使用斯坦福 CPP 库(可在http://www.stanford.edu/class/cs106b/materials/cppdoc/获得),并使用以下代码:

#include <iostream>
#include "simpio.h"
#include "map.h"
#include "vector.h"
using namespace std;

int main() {
    Map<Vector<char> , Vector<char> > frequencies;
    return 0;
}

我在 Xcode 4 上收到错误消息:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/c++/4.2.1/bits/stl_function.h:227:20:无效的操作数二进制表达式('const Vector' 和 'const Vector')

为什么是这样?

4

1 回答 1

1

快速浏览一下Vector文档会发现它不支持比较,这对于任何键类型都是概念上的必要条件。

您必须为 指定一个比较函子Map,或定义operator <( Vector< T > const &, Vector< T > const &)这样的库,以便库通过依赖于参数的查找找到它。

但是,您的库似乎缺乏对比较函子的支持,并且char不能用作依赖于参数的查找的挂钩,因此斯坦福库似乎不支持这一点。包装类(有点先进的技术)将是一种解决方法,但这将是毫无意义的努力。

如果您的课程没有涵盖 ISO 标准库,那将是非常不幸的。对斯坦福大学的期望会更好。


编辑糟糕,您可以operator<在全局命名空间中定义,因为Map不在命名空间中。这应该可以解决问题。

template< typename T >
bool operator < ( Vector< T > const &lhs, Vector< T > const &rhs ) {
    return std::lexicographical_compare(
        & lhs.get(0), & lhs.get( lhs.size() ),
        & rhs.get(0), & rhs.get( rhs.size() ) );
}
于 2013-06-06T02:45:40.340 回答