这是在 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/bits/stl_function.h:227:20: Invalid operands to binary expression ('const Vector' and 'const Vector')
这是为什么?
最佳答案
快速浏览 Vector
documentation表明它不支持比较,这对于任何键类型来说都是概念上的必要条件。
您必须为 Map
指定一个比较仿函数, 或定义 operator <( Vector< T > const &, Vector< T > const &)
这样库就可以通过依赖于参数的查找找到它。
但是,您的库似乎不支持比较仿函数,并且 char
不能用作依赖于参数的查找的 Hook ,因此斯坦福图书馆似乎不支持这一点。包装器类(某种高级技术)将是一种解决方法,但这将是毫无意义的努力。
如果您的类(class)没有涵盖 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() ) );
}
关于c++ - 斯坦福 C++ 库映射 vector 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16952866/