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; }};