在做 compiler 语义分析时, 需要用到 map<?,?>
在别人的代码上做扩展, 所以有些代码是不能动的
这时, 需要一个 map<symbol,int> 的数据结构, 但是我并不清楚 symbol 是否重载了 <
我特地试了一下, 没有重载 '<' 的新类, 使用 map 是要报错的
改用 map<symbol*,int>, 成功了
#include <iostream> #include <map> using namespace std; class unknow { private: int index; public: int get_index() { return index; } void increment() { index++; } /* bool operator<(const unknow &other) const { return this->index < other.index; } */ }; int main() { map<unknow*, int> mapping; unknow *u1 = new unknow(); unknow *u2 = new unknow(); unknow *u3 = new unknow(); mapping[u1] = 1; mapping[u2] = 2; mapping[u3] = 3; cout << u1 << endl; cout << u2 << endl; cout << u3 << endl; return 0; }
上面的代码, 使用 map<unknow,int> 会报错的
我想, 使用指针的话, 排序应该是按照地址来的, 不过想不出什么办法去验证
另外, 有一个问题困扰我很久了, 就是一一对应的数据结构的实现, 以前在做 coursera 算法作业时就需要一一对应, 当初专门去论坛问了下, 得知只能用 map<A,B>, map<B,A>, 这种实现实在太过粗糙, 弊端很多