斯坦福C ++库地图矢量错误

时间:2013-06-06 02:37:24

标签: c++ map vector

这是在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)

为什么会这样?

1 个答案:

答案 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() ) );
}