这是在Mac OSX 10.8上。使用Stanford 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 /比特/ stl_function.h:227:20: 二进制表达式的操作数无效(&#39; const Vector&#39;和&#39; const 矢量&#39)
为什么会这样?
答案 0 :(得分:1)
快速浏览Vector
documentation表明它不支持比较,这对任何关键类型都是概念上的必要。
您必须为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() ) );
}