error C2678: binary '<' : no operator found which takes a left-hand operand... (or there is no acceptable conversion)

c++, dictionary

Solution

`std::map` is (usually) implemented as binary search tree, most often red-black tree. It needs linear order to be defined for key values to find correct position within a tree. That's why `std::map` tries to call `operator<` on inserted key values.

Your class doesn't provide `operator<`. Either define `operator<` for your class or provide comparison function for template: `std::map<plVariablesConjunction, std::vector<plFloat>, my_comparison_function>`.

Problem

Here is my code to to find values in a map: ``` bool myclass::getFreqFromCache( plVariablesConjunction& varABC, vector<plFloat>& freq ) { std::map<plVariablesConjunction, std::vector<plFloat>>::iterator freqItr; freqItr = freqCache.find(varABC); if (freqItr != freqCache.end()) { freq = freqItr->second; return true; } } ``` "PlVariablesConjunction" is a ProBT library datatype. it contains operator "==", if two variables found same then it returns true otherwise false. Here is error: ``` C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(125): error C2678: binary '<' : no operator found which takes a left-hand operand of type 'const plVariablesConjunction' (or there is no acceptable conversion) 1> E:\ProBT22\probt-spl-2.2.0-expires-20121130-vc10-dynamic-release\include\plSymbol.h(71): could be 'bool operator <(const plSymbol &,const plSymbol &)' [found using argument-dependent lookup] 1> while trying to match the argument list '(const plVariablesConjunction, const plVariablesConjunction)' 1> C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional(124) : while compiling class template member function 'bool std::less<_Ty>::operator ()(const _Ty &,const _Ty &) const' 1> with 1> [ 1> _Ty=plVariablesConjunction 1> ] 1> C:\Program Files\Microsoft Visual Studio 10.0\VC\include\map(71) : see reference to class template instantiation 'std::less<_Ty>' being compiled 1> with 1> [ 1> _Ty=plVariablesConjunction 1> ] 1> C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xtree(451) : see reference to class template instantiation 'std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,_Mfl>' being compiled 1> with 1> [ 1> _Kty=plVariablesConjunction, 1> _Ty=std::vector<plProbValue>, 1> _Pr=std::less<plVariablesConjunction>, 1> _Alloc=std::allocator<std::pair<const plVariablesConjunction,std::vector<plProbValue>>>, 1> _Mfl=false 1> ] 1> C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xtree(520) : see reference to class template instantiation 'std::_Tree_nod<_Traits>' being compiled 1> with 1> [ 1> _Traits=std::_Tmap_traits<plVariablesConjunction,std::vector<plProbValue>,std::less<plVariablesConjunction>,std::allocator<std::pair<const plVariablesConjunction,std::vector<plProbValue>>>,false> 1> ] 1> C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xtree(659) : see reference to class template instantiation 'std::_Tree_val<_Traits>' being compiled 1> with 1> [ 1> _Traits=std::_Tmap_traits<plVariablesConjunction,std::vector<plProbValue>,std::less<plVariablesConjunction>,std::allocator<std::pair<const plVariablesConjunction,std::vector<plProbValue>>>,false> 1> ] 1> C:\Program Files\Microsoft Visual Studio 10.0\VC\include\map(81) : see reference to class template instantiation 'std::_Tree<_Traits>' being compiled 1> with 1> [ 1> _Traits=std::_Tmap_traits<plVariablesConjunction,std::vector<plProbValue>,std::less<plVariablesConjunction>,std::allocator<std::pair<const plVariablesConjunction,std::vector<plProbValue>>>,false> 1> ] 1> e:\probt22\work\yasin\testmmhcfinalversion\testmmhc_mi_probt_sw\mmhc\slidingWindow.h(55) : see reference to class template instantiation 'std::map<_Kty,_Ty>' being compiled 1> with 1> [ 1> _Kty=plVariablesConjunction, 1> _Ty=std::vector<plProbValue> 1> ] ```

Original source

Related problems