struct my_data_type { my_data_type(int i) : my_i(i) { } bool operator<(const my_data_type& other) const { return my_i < other.my_i; } int my_i; };
原因是您可以导出运算符>和operator ==来自operator< b < a意味着> b,所以有运算符>. !(a< b)&& !(b
operator==
is inevitable forstd::map::find()
这是你错误的地方.地图不使用operator ==,根本不是“不可避免的”.对于地图的目的,两个密钥x和y被认为是等效的,如果!(x< y)&& (y
if (search_key < current_element) go_left(); else if (current_element < search_key) go_right(); else declare_equivalent();
你建议的是:
if (search_key < current_element) go_left(); else if (current_element < search_key) go_right(); else if (current_element == search_key) declare_equivalent();
这显然是不需要的.事实上,这是你的建议效率低下!
相关文章
转载注明原文:c – std :: map要求的键(设计决策) - 代码日志
解决方法
operator==
is inevitable forstd::map::find()
这是你错误的地方.地图不使用operator ==,如果!(x< y)&& (y
if (search_key < current_element) go_left(); else if (current_element < search_key) go_right(); else declare_equivalent();
你建议的是:
if (search_key < current_element) go_left(); else if (current_element < search_key) go_right(); else if (current_element == search_key) declare_equivalent();
这显然是不需要的.事实上,这是你的建议效率低下!