class Concept { public: string name; }; map<Concept, int> conceptCount; conceptCount[i.c]++;
编译错误:
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_function.h: In member function ‘bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = Concept]’: /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_map.h:347: instantiated from ‘_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = Concept, _Tp = int, _Compare = std::less<Concept>, _Alloc = std::allocator<std::pair<const Concept, int> >]’ bayes.cpp:25: instantiated from here /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_function.h:227: error: no match for ‘operator<’ in ‘__x < __y’ make: *** [bayes.o] Error 1
原因:map中的key默认是以less<>升序对元素排序(排序准则也可以修改),也就是说key必须具备operator<对元素排序,而平常我们的用的基本上都是基本类型元素作为key
解决办法:重写operator <
class Concept { public: string name; bool operator <(const Concept& c) const { if(name < c.name) { return true; } return false; } };