c++ - 斯坦福 C++ 库映射 vector 错误

标签 c++ dictionary 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/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/

相关文章:

c++ - readyRead() 在 Qt 中如何工作?

python - 类型错误 : unhashable type: 'dict' Django

java - 将两个逗号分隔的字符串转换为 Map

c++ - STL优先级队列的初始化

c++ - 如何以更通用的方式转换 unique_ptr 的 vector

c++ - 为什么我的程序在 Linux 上运行时 splice syscall 失败,而在 gdb 中运行时成功?

C++ 如何动态创建二维 vector

C++ std::string 在任何平台上都是 100% RAII?

python - 如何创建一个Python字典(键: value) from select objects in a JSON file with multiple JSON lines

c++ - 资源管理- vector 和指针