Trying to figure out my C ++ and STL skills when running into a problem with std :: map based on the structure I defined. Relevant Code:
typedef struct key_t { int a; int b; bool operator==(const key_t& rhs) { return (a == rhs.a) && (b == rhs.b); } bool operator<(const key_t& rhs) //added the when I saw this error, didn't help { return a < rhs.a; } } key_t; std::map<key_t, int> fooMap; void func(void) { key_t key; key.a = 1; key.b = 2; fooMap.insert(std::pair<key_t, int>(key, 100)); }
The error looks like this:
"/opt/[redacted]/include/functional", line 133: error: no operator "<" matches these operands operand types are: const key_t < const key_t detected during: instantiation of "bool std::less<_Ty>::operator()(const _Ty &, const _Ty &) const [with _Ty=key_t]" at line 547 of "/opt/[redacted]/include/xtree" instantiation of "std::_Tree<_Traits>::_Pairib std::_Tree<_Traits>::insert(const std::_Tree<_Traits>::value_type &) [with _Traits=std::_Tmap_traits<key_t, UI32, std::less<key_t>, std::allocator<std::pair<const key_t, UI32>>, false>]"
What am I doing wrong? Is it just flat or impossible to use structures as a card key? Or something else I do not notice?
source share